systemdでプロセスが落ちたとき自動的に起動させる方法

設定

今まではプロセス監視にmonitなどを使っていたのですが、systemdではその機能があると知ったので試してました。

まずは*.service ファイルのRestartにalwaysが設定されている必要があります。(td-agentの場合は/usr/lib/systemd/system/td-agent.service)

Restart=always

設定

設定し終わったら必要に応じてserviceを再起動したあとプロセスを確認します。

$ ps axu |grep td-agent
root     15734  0.0  3.3 160492 32688 ?        Sl   06:51   0:00 /opt/td-agent/embedded/bin/ruby /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid
root     15739  0.0  4.7 200532 46316 ?        Sl   06:51   0:02 /opt/td-agent/embedded/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid --under-supervisor
ec2-user 16299  0.0  0.0 119484   972 pts/0    S+   07:54   0:00 grep --color=auto td-agent

起動しているプロセスをkillしてみます。

$ sudo kill -9 15734

もう一度プロセスを確認すると

$ ps axu |grep td-agent
root     16332  0.0  3.2 160492 32112 ?        Sl   07:57   0:00 /opt/td-agent/embedded/bin/ruby /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid
root     16337  6.8  4.0 186000 39972 ?        Sl   07:57   0:00 /opt/td-agent/embedded/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid --under-supervisor
ec2-user 16351  0.0  0.1 119484   992 pts/0    S+   07:57   0:00 grep --color=auto td-agent

このようにちゃんとPIDが変わって起動されているのが分かりました。

参照

https://morizyun.github.io/infrastructure/tips-systemd.html