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
サービスが実行されているかどうかを知りたいだけの場合は、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"
または同様のものを使用できます。
Monitには、正規表現を使用してプロセスを照合するためのオプションもあります。
したがって、最初にシェルから実行します:(テスト用)
monit procmatch 'program'
稼働時間が最も長いプロセスと一致します。次に、monit構成を追加できます。
check process myprogram matching 'progr.*'
start program = /bin/app
stop program = something..