日々ブログ

当サイトは、アフィリエイトプログラムにより商品をご紹介しています

【プログラミングのお話】systemdでpythonスクリプトを自動起動する

プログラミングをしているとコードを作成するだけでなく、思った通りに動く環境を作るのも大事になってくるんですよね。
とくにスクレイピングだと自動で勝手に取得してくれるだけでかなり手間が減ります。
今回は、Linuxのsysmtemdを使ってpythonスクリプトを自動で実行してみたいと思います。

systemd の役割

systemdに登録することで、マシンの電源を点灯するだけでプログラムを自動で実行することができます。
いわゆるdamon化ってやつです。 そのほか、プログラムが何等かの異常で終了していたりしたときにログをの越してくれたり、自動で復旧したりするようにしてくれます。

systemdに登録する

今回は、pythonで記述したプログラムを題材にsystemdで登録します。
題材は、以前紹介したFXの価格を取得するプログラムを使います。
これを利用することで、起動するだけでプログラムが実行されるようになるので、たとえば、持て余しているラズベリーパイを価格の取得マシンするといったことができます。

xinformation.hatenadiary.com

上記のプログラムをopt以下に配置します。
厳密にはどこでもよいのですが、Linuxのお作法として、opt以下に配置するのが良いみたいです。

mkdir /opt/get-currency
sudo cp -r src/common/gmo/get_currency.py /opt/get-currency/
sudo cp -r venv/ /opt/get-currency/

systemd に登録する際に必要な設定ファイルを作ります。
実行プログラムの場所とこのプログラムと他のプログラムの依存関係を記述しています。
基本的には、WorkingDirectoryとExecStartを変えてやれば他のプログラム大抵動くはず。

[Unit]
Description=get gmo currency
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/get-currency/
ExecStart=/opt/get-currency/venv/bin/python /opt/get-currency/get_currency.py

[Install]
WantedBy=multi-user.target

設定ファイルをsystemdへ登録する際には下記のコマンドを実行します。

sudo cp ./config/get-currency-gmo.service /etc/systemd/system/
sudo chmod 755 get-currency-gmo.service
sudo systemctl enable get-currency-gmo.service

これで登録は完了です。
一度やり方を覚えてしまうと簡単です。
登録が完了しているかどうかは次のコマンドで確認できます。

systemctl status get-currency-gmo.service

active(running)となっているので無事登録されています。