Raspberry Piを起動したタイミングで実行させたいプログラムがあるときに、よく使う方法をご紹介します。

チャレンジ&ナレッジ最終更新日: 20220302

Raspberry Pi4起動時に指定したプログラムを実行させる

  • このエントリーをはてなブックマークに追加

Raspberry Piを起動したタイミングで実行させたいプログラムがあるときに、よく使う方法をご紹介します。

1.ターミナルを起動し、systemdに移動する

ターミナルを起動して、下記のコマンドを入力してください。

cd /etc/systemd/system/

2.新規ファイルを作成して、設定ファイルを書き込む

以下のコマンドで、適当なファイル名で新しいファイルを作成します。

sudo vim test.service

新しいファイルを作成したら、下記の設定を記述します。

[Unit]
Description=Do test

[Service]
ExecStart=/usr/bin/python3 /home/pi/Desktop/test.py

[Install]
WantedBy=multi-user.target

それぞれの設定項目の説明をすると、

Description:起動するコマンドの概要を書く(任意のテキスト)

ExecStart:起動するコマンドを書く(上記の例はデスクトップに置いたtest.pyを実行しています。コマンドも含めて絶対パスにする必要があります)

またオプションとして、ExecStartの行の下に、以下の内容を追記することができます。

起動したプロセスが終了したときに自動的に再起動する
Restart=always
再起動するまでの時間を指定する
RestartSec=10

別ウインドウのターミナルを開いて、適当な名前で今回実行させるpythonのプログラムを用意します。

下記のコードを入力してください。

import time

while True:
    print("ok")
    time.sleep(3)

3.ファイルが正常に動くか確認する

ここまで出来たら、ファイルを保存して下記のコマンドで、正しく動作するかを確認します。

sudo systemctl start test.service
sudo systemctl status test.service

コマンド上にactive(running)という表示があれば、正常に動作していることを表しています。

実行させたいプログラムが永続的なループ処理ではなかった場合、一度プログラムは動きますが、ステータスの部分がactiveという表示ではない場合があります。

この場合、プログラムを一度呼び出すとループ処理をしていないため、すでに実行済みの状態になるので気をつけましょう。

動作の確認ができたら、プロセスを終了します。下記のコマンドを実行してください。

sudo systemctl stop test.service

4.起動時に動くように設定する

次に、実際にRaspberry Pi4を起動したときに、プログラムが実行されるように設定をします。

下記のコマンドを入力してください。

sudo systemctl enable test.service

起動時の実行を停止したい場合は、下記のコマンドを実行すると設定を無効にできます。

cd /etc/systemd/system/
sudo systemctl disable test.service

使うシチュエーションによっては、ネットワーク接続が安定した後にプログラムを起動したい場合や他のコマンドの実行後に実行したい場合など、少し時間をおいてタイマーで実行させたいときがあります。

その場合は、先ほど作成した「test.service」と同じ階層に「test.timer」というファイルを作成し、下記の設定を記述します。

sudo vim test.timer
[Unit]
Description=test.service timer

[Timer]
OnBootSec=2min
Unit=test.service

[Install]
WantedBy=multi-user.target

OnBootSecを記述すると、起動するまでの待機時間を指定することができます。

この記載では、2分後に起動する設定になっています。

それでは、作成した設定ファイルを下記のコマンドで実行して、タイマーで実行できるようにします。

sudo systemctl enable test.timer

この状態では、変化がわかりづらいのでRaspberry Pi4を再起動してどうなっているのか確認します。

再起動した後2分後に以下のコマンドを実行して、設定したtest.timerが正常に動作しているか確認できました。

sudo systemctl status test.timer

下図のようにactiveの表示の場合、正常に動作していることを表しています。

この他にも、Raspberry Pi4でプログラムを起動するやり方はありますが、今回は「systemd」を使ったプログラムの自動起動をやってみました。

他にもオプションの付け方で、色々な設定をすることが出来るので、その都度調べながら追加して自分が使いやすいようにカスタマイズするのもいいですね。

ライタープロフィール 合同会社 4D Pocket 石郷祐介

公設研究機関勤務を経て、情報科学芸術大学院大学[IAMAS]に入学。
主に研究開発をコンセプトから開発までサポートする企業「合同会社4D Pocket」代表 。
エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」共同代表(教頭)。
2022年度より「名古屋文理大学」及び「名古屋造形大学」非常勤講師。

記事を
シェア