web-dev-qa-db-ja.com

Systemdがkill後にmonitを再起動しない

起動時に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を使用しています

1
Hirurg103

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に設定すると、正常に終了したかどうかに関係なく、サービスは再起動されます。シグナルによって異常終了したか、タイムアウトに達しました。

enter image description here

画像ソース

ソース:

https://www.freedesktop.org/software/systemd/man/systemd.service.html

2
George Udosen

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
1
Hirurg103