web-dev-qa-db-ja.com

Monitを使用して/ var / run / pidファイルを持たないサービスを監視するにはどうすればよいですか?またはpidファイルを作成するにはどうすればよいですか?

Debian9.8を使用しています

Dotnetプログラムを実行するサービスがあります。 monitで監視したいのですが、すべての例で/ var/runに.pidファイルを参照する必要がありますが、私のdotnetプログラムには/ var/runに.pidファイルがありません。

そのため、サービスの.serviceファイルにPIDFile =/var/run/testservice.pidを追加しましたが、起動時にファイルが作成されません。

これは私がいるところです

これは私の.serviceファイルです

[Unit]
Description=Test Service
Wants=network-online.target influxdb.service
After=network-online.target influxdb.service

[Service]
User=testservice
Group=mainapp
SyslogIdentifier=testservice
PIDFile=/var/run/testservice.pid

Restart=on-failure
TimeoutStopSec=5
RestartSec=10

ExecStart=/usr/bin/dotnet /mainapp/app/TestSystemdService.dll

[Install]
WantedBy=multi-user.target
1
TheColonel26

サービスが実行されているかどうかを知りたいだけの場合は、systemdにクエリを実行できます。

systemctl is-active TestApp.service

特に既知の障害が原因で非アクティブになっているかどうかを確認することもできます。

systemctl is-failed TestApp.service

ドキュメントによると これはcheck program … with pathとしてmonitに組み込むことができます:

check program TestApp with path "systemctl --quiet is-active TestApp"
    if status != 0 then ...

SystemdのPIDFile=は、PIDをどこから読み取るかをinitに指示するためのものであることに注意してください。デーモン自体がpidfileを作成しない場合、systemdは確かに気にしません。本当に必要な場合は、ExecStartPost=/bin/sh -c "echo $MAINPID > /run/testapp.pid"または同様のものを使用できます。

4
user1686

Monitには、正規表現を使用してプロセスを照合するためのオプションもあります。

したがって、最初にシェルから実行します:(テスト用)

monit procmatch 'program'

稼働時間が最も長いプロセスと一致します。次に、monit構成を追加できます。

check process myprogram matching 'progr.*'
     start program = /bin/app
     stop program = something..
3
fugitive