web-dev-qa-db-fra.com

Comment puis-je utiliser Monit pour surveiller un service qui n'a pas de fichier / var / run / pid ou comment puis-je créer un fichier PID?

J'utilise Debian 9.8

J'ai un service qui dirige mon programme DotNet. Je voudrais le surveiller avec Monit mais dans tous les exemples, vous devez faire référence à un fichier .pid dans/var/var/gérer, mais mon programme DotNet n'a pas de fichier .pid in/var/exécuté.

J'ai donc ajouté pidfile =/var/exécutant/testservice.pid au fichier .service de mon service, mais cela ne crée pas le fichier lorsque je le démarre.

C'est là que je suis à

ceci est mon fichier .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
4
TheColonel26

Si tout ce que vous voulez, c'est savoir si le service est en cours d'exécution, vous pouvez interroger SystemD:

systemctl is-active TestApp.service

Vous pouvez également vérifier si elle est spécifiquement inactive en raison d'une défaillance connue:

systemctl is-failed TestApp.service

selon DOCS, Cela peut être intégré à monit comme check program … with path:

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

Notez que SystemD's PIDFile= est pour dire à INIT où lire le PID. Si le démon lui-même ne crée pas de pidfile, Systemd ne se dérangera certainement pas. Si vous en avez vraiment besoin d'un, vous pourriez avoir un ExecStartPost=/bin/sh -c "echo $MAINPID > /run/testapp.pid" ou quelque chose de similaire.

7
user1686

Monit a une option pour les processus correspondants à l'aide de RegEx.

Donc, d'abord, vous feriez de Shell: (pour tester)

monit procmatch 'program'

Il correspondra à traiter avec le temps de disponibilité. Ensuite, vous pouvez ajouter une configuration monit:

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