How to add self pythonscript to Linux systemd?

今回は自前で作成したPythonスクリプトをManjaroLinuxのデーモンに登録してみました。

筆者はBitcoinのBitFlyerのAPI経由で先方のサーバに蹴られないレベルで数秒置きに
データを取得しています。

これまではcronに常時実行スクリプトを登録しておりましたが、
稀に落ちてしまうことがあります。
(おそらく回線の瞬断?やパケットロスやBitFlyerサーバのレスポンス異常などと推測)

そのため別の監視スクリプトで毎分落ちてないか確認していたのですけども、
このデーモンにすることでサービスが落ちても自動再実行されるようになりました。

というわけで、今回はその方法について記述していきます。

ファイルのパスは上記を見てわかるように、/etc/systemd/system/配下に、
getbf2sql.serviceという場所に格納されています。

この「getbf2sql.service」の中身は以下になります。


[Unit]
Description = get BitFlyer data to MySQL daemon

[Service]
ExecStart = /opt/getbf2sql.py
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

上記の中で実行したいファイルが「/opt/getbf2sql.py」となります。

ファイルを格納したら、以下コマンドでリストに出るか確認します。


$ sudo systemctl list-unit-files --type=service | grep getbf2sql

getbf2sql.service                          disabled        disabled

出てきましたね、これを早速有効化します。


$ sudo systemctl enable getbf2sql   

再度確認してみます、おっ!enabledになりました。


$ sudo systemctl list-unit-files --type=service | grep getbf2sql

getbf2sql.service                          enabled         disabled

では開始してみましょう。


$ sudo systemctl start getbf2sql

● getbf2sql.service - get BitFlyer data to MySQL daemon
     Loaded: loaded (/etc/systemd/system/getbf2sql.service; disabled; vendor preset: disabled)
     Active: active (running) since Sun 2021-10-24 23:43:14 JST; 5min ago
   Main PID: 70355 (getbf2sql.py)
      Tasks: 1 (limit: 18963)
     Memory: 17.5M
        CPU: 7.088s
     CGroup: /system.slice/getbf2sql.service
             └─70355 /usr/bin/python3 /opt/getbf2sql.py

10月 24 23:43:14 tpx230-manjaro systemd[1]: Started get BitFlyer data to MySQL daemon.

これでバッチリ起動できました。
Memory、CPUの利用状況もわかるようになりますね。

尚、この方法はUbuntuでも可能です。

参考まで!