Skip to content

systemdユニットでリスタートする方法と制限

systemdはプロセスが異常終了したときの再起動を行うしくみとレートリミットを持っている。

Restart=on-failure
StartLimitBurst=3
StartLimitIntervalSec=60
StartLimitAction=none

ユニットファイル自体に記述していなくてもこれらの値は設定されていて、デフォルト値は /etc/systemd/system.conf で変更する。実際にユニットへ適用された値は systemctl show で確認できる。systemctl show コマンドの具体例はsystemdユニットをデバッグするで書いた。

StartLimitBurst=StartLimitIntervalSec= の意味は、上記の例だと「60秒間で3回再起動すると試行を停止する」となる。再起動する間隔は調べていないが、systemdなのでうまく調整するのだろう。このとき、リミットに到達してしまうと後続の systemctl startsystemctl restart まで巻き込んで止められてしまって問題になることがある。この失敗カウンタは systemctl reset-failed でリセットできる。

Terminal window
systemctl reset-failed xxx.service

現在のカウンタ値を確認するコマンドは存在しない(少なくとも2025年12月時点では見つけられない)が、プロセスが再起動したときに何度目の再起動なのかをログに出力するので、journalctl で読めば少なくともその時点の値は確認はできる。

Restart= ディレクティブはsystemdでプロセス自動再起動が詳しい。