J'utilise Upstart 1.5 dans Ubuntu 12.04 pour gérer un processus créé par un utilisateur, mais il doit être géré en tant que travail système, à partir du démarrage, réapparaissant en cas d'échec et que nous puissions le démarrer/arrêter à n'importe quel moment. créez son fichier .conf dans/etc/init et procédez comme suit:
description "Start face services recognition and monitors it"
version "1.0"
start on runlevel[5]
stop on runlevel[06]
respawn
expect fork
normal exit 0 TERM STOP
script
exec sh -c /home/verstand/facefeatures
end script
post-stop script
if [ ! $EXIT_STATUS && ! $EXIT_SIGNAL ]
then
exec Sudo -u $USER "/sbin/shutdown -r now"
fi
end script
Les signaux ici sont destinés à redémarrer le système en cas d'urgence où Upstart ne réactive pas le processus.
Maintenant, le problème est que lorsque nous commençons le processus, il fonctionne correctement, avec Sudo initctl start facefeatures
, mais lorsque nous essayons de l’arrêter, il se bloque et nous devons utiliser Ctl + C pour renvoyer le contrôle tty. Encore plus, si nous essayons de le redémarrer ou de le redémarrer, Upstart indique qu'il est déjà en cours d'exécution: start/running facefeatures
mais si nous utilisons initctl list
Upstart indique que le processus a été tué: stop/killed facefeatures
De plus, si nous redémarrons la première fois, le processus se déroule normalement, mais si nous redémarrons une seconde fois, il ne le fera plus ...
Quel est le problème de mon fichier de configuration? Quelle est la bonne façon de faire cela?
Si facefeatures n’est pas un script, je pense que c’est un problème de retardateur qui ne sait pas quel processus regarder. Ne le démarrez avec exec et pas avec script strophe:
description "Start face services recognition and monitors it"
version "1.0"
start on runlevel[5]
stop on runlevel[06]
normal exit 0 TERM STOP
expect fork
respawn
exec /home/verstand/facefeatures
post-stop script
if [ ! $EXIT_STATUS && ! $EXIT_SIGNAL ]
then
exec Sudo -u $USER "/sbin/shutdown -r now"
fi
end script
Lors de l’arrêt du service, votre programme recevra un TERM; s’il ne réagit pas à ce signal, il sera tué au bout de cinq secondes.