プログラミングをしているとコードを作成するだけでなく、思った通りに動く環境を作るのも大事になってくるんですよね。
とくにスクレイピングだと自動で勝手に取得してくれるだけでかなり手間が減ります。
今回は、Linuxのsysmtemdを使ってpythonスクリプトを自動で実行してみたいと思います。
systemd の役割
systemdに登録することで、マシンの電源を点灯するだけでプログラムを自動で実行することができます。
いわゆるdamon化ってやつです。
そのほか、プログラムが何等かの異常で終了していたりしたときにログをの越してくれたり、自動で復旧したりするようにしてくれます。
systemdに登録する
今回は、pythonで記述したプログラムを題材にsystemdで登録します。
題材は、以前紹介したFXの価格を取得するプログラムを使います。
これを利用することで、起動するだけでプログラムが実行されるようになるので、たとえば、持て余しているラズベリーパイを価格の取得マシンするといったことができます。
上記のプログラムを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)となっているので無事登録されています。