Pages

2021年7月14日水曜日

サービスの継続起動

特定のサービス(プロセス)が急にダウンした場合に、
自動的に再起動させる方法。

(cronで毎分監視して起動していなければ再起動させるスクリプトが
 必要かも、と思っていたが、そんな原始的な方法はせずに済んだ)

 例 Radiusサービス radiusd

# vi /usr/lib/systemd/system/radiusd.service
([Service]のTypeの次に Restart=always の行を追加)
# diff /usr/lib/systemd/system/radiusd.service 元ファイル
7d6
< Restart=always
# systemctl daemon-reload

補足:
# systemctl daemon-reload
をせずに
# systemctl restart radiusd
を実行したら
Warning: radiusd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
と怒られる。

■実験結果(失敗編)
# ps -ef | grep radiusd | grep -v grep
radiusd  22457     1  0 08:37 ?        00:00:00 /usr/sbin/radiusd -d /etc/raddb
# systemctl stop radiusd
# ps -ef | grep radiusd | grep -v grep
※起動が確認できない
# systemctl restart radiusd
# ps -ef | grep radiusd | grep -v grep
radiusd  22615     1  0 08:42 ?        00:00:00 /usr/sbin/radiusd -d /etc/raddb
プロセスを systemctl stop radiusd で停止させては動作しない様子。
kill -9 など異常終了の場合に有効らしい。

■実験結果(成功編)
# ps -ef | grep radiusd | grep -v grep
radiusd  22615     1  0 08:42 ?        00:00:00 /usr/sbin/radiusd -d /etc/raddb
# kill -9 22615
# ps -ef | grep radiusd | grep -v grep
radiusd  22744     1  0 08:47 ?        00:00:00 /usr/sbin/radiusd -d /etc/raddb
\(^o^)/
kill でプロセスを停止したのに radiusd は動作している。
プロセス番号が違っている(22615→22744)ので、再起動したことが確認できた。