Raspberry Piで特定のスクリプトを動かすだけの場合、本体に電源が入った際にスクリプトが自動的に実行されると便利です。Windowsではスタートアップという方法がありますが、Raspberry PiのOSはLinux系なので今回勉強のために調べてみました。
systemd のユニットファイルの作成および変更
[Red Hat documentation]
systemdを使用したシステム・サービスの管理
[Oracle]
大ざっぱに言えば、/etc/systemd/system 内にスクリプトをサービスとして登録するためのユニットファイルというファイルを作成します。実行するスクリプトや実行ルールはこのファイル内に定義するようです。
そうするとファイルがサービスとして実行可能になるので起動時に実行されるように設定すれば良いようです。さっそくやってみました。
ユニットファイルの作成
ユニットファイルはそもそも存在していないので、新しく作成します。今回はhoge.serviceというファイルを新規に作成します。
<ターミナル>
cd /etc/systemd/system/
sudo vim hoge.service
Vimが入っていない場合は以下のコマンドでインストールできます。
<ターミナル>
sudo apt-get install vim
そうすると空の状態のhoge.serviceがエディタで開くので以下の内容を入力していきます。
[Unit]
Description=hoge
[Service]
ExecStart=/usr/bin/python3 /home/pi/hoge.py
Restart=Always
[Install]
WantedBy=multi-user.target
それぞれの項目の説明です。
Unit部については単なる説明書きです。
Service部でユニット開始時に実行するスクリプトの場所を指定します。今回はスクリプトがPythonなのでPythonのパスとスクリプトのパスをあわせて記述しています。Restart=Alwaysを記述しておくことでスクリプトが終了してしまったときに自動的にスクリプトを再起動することができます。
最後のInstall部がちょっと分かりにくいところです。”multi-user.target”にすることで ネットワーキングを使用するが、ディスプレイマネージャーは使用しない という設定になるそうです。画面表示のない電子工作用のスクリプトであればこれで問題ないと思います。
入力ができたら保存してエディタを閉じます。
起動時に実行する設定
サービスが登録できたので後は起動時に実行されるように設定をします。
<ターミナル>
sudo systemctl enable hoge.service
これで起動時にhoge.serviceが実行されるようになります。