systemdのサービスとしてpythonスクリプトを実行
systemd
のサービスを作るチュートリアルは多々ありますが、説明が少なすぎたり多すぎたりするのが多いのですが丁度良い具合のチュートリアルがありました。
systemd
のサービスを作成するには
* unit ファイルの作成
* サービスを実行可能に設定
する必要があります。
systemd
ユニットファイル
/etc/systemd/system
フォルダに service_name.service
とファイル名で以下のような内容のファイルを作成します。
[Unit] Description=My Systemd service After=multi-user.target [Service] Type=simple ExecStart=/home/pi/my_python.py User=pi WorkingDirectory=/home/pi/ Restart=on-failure [Install] WantedBy=multi-user.target
Description
はサービスの概要です。
is the user-friendly name of the service.
After=multi-user.target
は全てのユーザーがログイン可能になった後で実行する設定です。特に考えず
この設定にしておけば問題ないでしょう。
Type
はサービスをどのように実行するかの設定です。他にもいろいろあるようですが普通のスクリプトを実行するだけのサービスならsimple
で良さそうです。一応、リンク。
ExecStart
には実行したいスクリプトを指定します。実行権限を付けてスクリプトの一行目にshebangを付けておきましょう。
pi@pizero1:~ $chmod +x my_python.py
#!/usr/bin/python3
User
は指定しないとroot
で実行されるので指定しておきましょう。
WorkingDirectory
は実行フォルダを指定します。オプションなので指定しなくても大丈夫です。
Restart=on-failure
はエラーでスクリプトが修了した際にリスタートする設定です。
WantedBy
はブート時にサービスがインストールされ開始可能にする設定です。この設定を使っておけば問題なさそうです。
実行可能に設定
上のユニットファイルを/etc/systemd/system/
フォルダに作成したら、後は
pi@pizero1:~ $ sudo systemctl daemon-reload pi@pizero1:~ $ sudo systemctl enable my_service pi@pizero1:~ $ sudo systemctl start my_service
で実行されます。enable
を設定したのでマシンの起動時に自動的に実行されます。