systemdユニットでリスタートする方法と制限
systemdはプロセスが異常終了したときの再起動を行うしくみとレートリミットを持っている。
Restart=on-failureStartLimitBurst=3StartLimitIntervalSec=60StartLimitAction=noneユニットファイル自体に記述していなくてもこれらの値は設定されていて、デフォルト値は /etc/systemd/system.conf で変更する。実際にユニットへ適用された値は systemctl show で確認できる。systemctl show コマンドの具体例はsystemdユニットをデバッグするで書いた。
StartLimitBurst= と StartLimitIntervalSec= の意味は、上記の例だと「60秒間で3回再起動すると試行を停止する」となる。再起動する間隔は調べていないが、systemdなのでうまく調整するのだろう。このとき、リミットに到達してしまうと後続の systemctl start や systemctl restart まで巻き込んで止められてしまって問題になることがある。この失敗カウンタは systemctl reset-failed でリセットできる。
systemctl reset-failed xxx.service現在のカウンタ値を確認するコマンドは存在しない(少なくとも2025年12月時点では見つけられない)が、プロセスが再起動したときに何度目の再起動なのかをログに出力するので、journalctl で読めば少なくともその時点の値は確認はできる。
Restart= ディレクティブはsystemdでプロセス自動再起動が詳しい。