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
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.
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..