BLOGTIMES
2021/09/20

systemd から起動されているサービスを定期的に再起動する

  systemmanagemant 
このエントリーをはてなブックマークに追加

systemd から起動されているサービスを定期的に再起動したい。

安直な方法としては cron とか timer を使って systemctl restart exmample.service を定期的に実行してやれば済むというのは分かるのですが、ちょっとダサすぎるので、今回はもう少しスマートな解決方法を探ります。というわけで systemd.service のマニュアルを読んでみると、RuntimeMaxSec=を使うとサービスの最大実行時間を秒単位で指定できることが分かりました。

systemd.service

RuntimeMaxSec=

Configures a maximum time for the service to run. If this is used and the service has been active for longer than the specified time it is terminated and put into a failure state. Note that this setting does not have any effect on Type=oneshot services, as they terminate immediately after activation completed. Pass "infinity" (the default) to configure no runtime limit.

例えばサービスの定義を以下のようにすると、RuntimeMaxSec=86400によって 86400秒(=1日)ごとにサービスは終了するようになります。これに、Restart=alwaysを組み合わせると、サービスの終了時に自動的にサービスが起動されるようになるので、これらの合わせ技でサービスを定期的に再起動できることになります。

example.service

[Service] ・・・・・ Restart=always RuntimeMaxSec=86400 ・・・・・

crontimer と組み合わせるよりも定義が 1 箇所で完結できて便利です。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/12731
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン