起動時にsystemdがmonitをロードできるようにしました
Sudo systemctl enable monit
Sudo systemctl restart monit
ps aux | grep monit
root 6843 0.0 0.2 112492 2948 ? Sl 18:19 0:00 /usr/bin/monit -c /etc/monit/monitrc
lookpla+ 6857 0.0 0.0 14212 1008 pts/0 S+ 18:21 0:00 grep --color=auto monit
しかし、monitを殺しても、それは再開しません。
Sudo kill 6843
ps aux | grep monit
lookpla+ 6862 0.0 0.1 14212 1028 pts/0 S+ 18:23 0:00 grep --color=auto monit
Systemctlは、monitがアクティブであるが終了したことを示します
Sudo systemctl status monit.service
●monit.service-LSB:サービスおよびリソース監視デーモン ロード済み:ロード済み(/etc/init.d/monit;生成;ベンダープリセット:有効) ドロップイン:/etc/systemd/system/monit.service.d └─override.conf Active:active(exited)since Wed 2017-09-06 18:19:17 UTC; 4分29秒前 ドキュメント:man:systemd-sysv-generator(8) プロセス:6830 ExecStop =/etc/init.d/monit stop(code = exited、status = 0/SUCCESS) プロセス:6835 ExecStart =/etc/init.d/monit start(code = exited、status = 0/SUCCESS) メインPID:6843(code = exited、status = 0/SUCCESS) Sep 06 18:19:17 localhost systemd [1]:停止されたLSB:サービスとリソース監視デーモン。 Sep 06 18:19:17 localhost systemd [1]: LSBの開始:サービスおよびリソース監視デーモン... Sep 06 18:19:17 localhost monit [6835]:*開始デーモンモニターmonit Sep 06 18:19:17 localhost monit [6835 ]:... done。 Sep 06 18:19:17 localhost systemd [1]:monit.service:PID file /run/monit.pid not readable(yet?)start after:No such file or directory Sep 06 18:19:17 localhost systemd [1]:Started LSB:service and resource monitoring daemon。
殺された後にmonitが再起動するようにsystemdを設定するのを手伝ってくれませんか?
私はubuntu 17.04を使用しています
Restart
オプションをsystemd
サービスファイルに追加すると、systemctl stop
コマンドで停止しなくても開始できるようになると思います。
Restart=[no | on-success | on-failure | on-abnormal | on-watchdog | on-abort | always ]
情報:
no:デフォルトでは、サービスは再起動されません
on-success:は、サービスプロセスが正常に終了した場合にのみ再起動されます
on-failure:プロセスがゼロ以外の終了コードで終了すると再起動されます
on-abort:は、クリーンな終了ステータスとして指定されていないキャッチされていないシグナルが原因でサービスプロセスが終了した場合にのみ再起動されます
on-watchdog:は、サービスのウォッチドッグタイムアウトが期限切れになった場合にのみ再起動されます
always:正常に終了したかどうか、シグナルによって異常終了したか、タイムアウトに達したかに関係なく、再起動されます
Restart =サービスプロセスの終了、強制終了、またはタイムアウトに達したときにサービスを再起動するかどうかを構成します。サービスプロセスはメインサービスプロセスの場合がありますが、ExecStartPre =、ExecStartPost =、ExecStop =、ExecStopPost =、またはExecReload =で指定されたプロセスの1つである場合もあります。プロセスの停止がsystemd操作(サービスの停止または再起動など)の結果である場合、サービスは再起動されません。タイムアウトには、ウォッチドッグ「キープアライブping」期限の欠落、サービスの開始、再読み込み、および停止操作のタイムアウトが含まれます。
いいえ、成功、失敗、異常、ウォッチドッグ、中止、または常時のいずれかを取ります。 no(デフォルト)に設定すると、サービスは再起動されません。 on-successに設定すると、サービスプロセスが正常に終了した場合にのみ再起動されます。このコンテキストでは、正常終了は、0の終了コード、またはシグナルSIGHUP、SIGINT、SIGTERM、またはSIGPIPEのいずれか、さらに、SuccessExitStatus =で指定された終了ステータスとシグナルを意味します。 on-failureに設定すると、プロセスがゼロ以外の終了コードで終了したときにサービスが再起動され、操作(サービスなどの)時にシグナル(コアダンプを含むが、前述の4つのシグナルを除く)によって終了します。 reload)タイムアウトし、構成されたウォッチドッグタイムアウトがトリガーされたとき。 on-abnormalに設定すると、プロセスがシグナル(コアダンプを含む、前述の4つのシグナルを除く)によって終了したとき、操作がタイムアウトしたとき、またはウォッチドッグタイムアウトがトリガーされたときに、サービスが再起動されます。 on-abortに設定すると、キャッチされていないシグナルがクリーン終了ステータスとして指定されていないためにサービスプロセスが終了した場合にのみ、サービスが再起動されます。 on-watchdogに設定すると、サービスのウォッチドッグタイムアウトが期限切れになった場合にのみ、サービスが再起動されます。 alwaysに設定すると、正常に終了したかどうかに関係なく、サービスは再起動されます。シグナルによって異常終了したか、タイムアウトに達しました。
ソース:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
RemainAfterExit
設定オプションでうまくいった
Systemd構成を何時間か試した後、私は機能する解決策を見つけました:
Sudo systemctl edit monit
次に、次の構成を入力します。
[Service]
PIDFile=/var/run/monit.pid
Restart=always
RemainAfterExit=no
そしてデーモンをリロードします:
Sudo systemctl daemon-reload
Sudo systemctl restart monit
Systemdがkillすると、monitサービスが再起動します。
ps aux | grep monit
root 7822 0.0 0.2 112476 2872 ? Sl 19:09 0:00 /usr/bin/monit -c /etc/monit/monitrc
lookpla+ 7855 0.0 0.0 14212 1008 pts/0 S+ 19:12 0:00 grep --color=auto monit
Sudo kill 7822
root 7872 0.0 0.2 112476 2964 ? Sl 19:13 0:00 /usr/bin/monit -c /etc/monit/monitrc
lookpla+ 7875 0.0 0.0 14212 984 pts/0 S+ 19:13 0:00 grep --color=auto monit