Je veux avoir un processus qui sera redémarré s'il se bloque. J'ai googlé un peu et trouvé qu'une solution facile consiste à utiliser daemontools .
Je n'ai pas compris comment le configurer.
Il semble que vous recherchiez une fonctionnalité déjà fournie dans Ubuntu avec Upstart . La strophe respawn
de la configuration fera exactement ce dont vous avez besoin. Je recommanderais de ne pas utiliser une méthode moins standard.
Sans plus de détails sur le processus que vous essayez de gérer, il est difficile de dire à quoi devrait ressembler la configuration. Cela dépend si elle se fourche et se met en arrière-plan par exemple. La documentation Upstart sur la strophe respawn
devrait vous donner plus d’informations.
Malheureusement, il n’est pas encore possible d’exécuter correctement les tâches utilisateur: impossible de procéder à un démarrage rapide pour exécuter la tâche utilisateur
Supposons que nous voulions que l'application Calculatrice continue de fonctionner, même lorsqu'elle est tuée par le feu (signal 9).
Créez un fichier de configuration dans /etc/init/calculator.conf
(basé sur cet article ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
Commencez par courir
Sudo start calculator
Il s'ouvre sur votre écran actuel (:0
) et profitez de la génialité en le voyant redémarrer après sa fermeture.
Identifiez l'ID de processus, par exemple en faisant ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Tuez-le avec le feu.
Sudo kill -9 13695
Regardez-le réapparaître:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Notez que cela sera plus élégant avec les plans pour les plans Ubuntu 13.04 avec le support utilisateur approprié.
Un outil extrêmement simple pouvant accomplir le même effet sans nécessiter de configuration est immortal
name__: https://immortal.run/
Exécutez simplement la commande comme ceci:
immortal <cmd>
Il fonctionnera en arrière-plan et redémarrera automatiquement s'il se ferme.
immortalctl
name__: affiche le statut des travaux en cours. Il y a une colonne name
qui sera imprimée ici. Vous pouvez l'utiliser pour faire référence au travail avec d'autres commandes de contrôle.immortalctl stop <name>
: Arrête de surveiller le travail avec le nom donné (il ne sera pas automatiquement redémarré, mais le processus en cours continuera à s'exécuter)immortalctl -k <name>
: envoie SIGKILL au processus en cours.immortalctl exit <name>
: Arrête de surveiller le travail avec le nom donné et le supprime de la liste des travaux.Si vous n'avez pas besoin de la fonctionnalité de processus démon/service/arrière-plan et souhaitez simplement le faire dans la console, créez un fichier appelé autorestart.sh
:
#!/bin/bash
while [ 1 ]; do
some_command
done
Ensuite, ./autorestart.sh
redémarre automatiquement some_command
s'il se ferme ou se bloque. CTRL-C rompt la boucle et quitte le programme proprement.
Testé sur Ubuntu 18.04.
Les processus de démarrage et de réapparition sont gérés par "systemd" depuis Ubuntu 15.04, une bonne introduction peut être trouvée ici
un exemple qui vous permet de commencer est disponible sur
https://www.devdungeon.com/content/creating-systemd-service-files
Cette approche remplace les anciennes basées sur/etc/inittab et upstart.
Il y a une manière sans "Upstart". Le mot clé est "inittab" :-). Bien que ce fichier ne soit généralement pas modifié par défaut, il peut être utilisé pour obtenir le respawning souhaité sur les ordinateurs SYSV.
ps-watcher est un outil qui surveille les processus en cours d'exécution et exécute une action dans des circonstances définies. Installons-le:
apt-get install ps-watcher
Voir le bas de Exécution de HHVM avec repli sur PHP-FPM pour plus de détails - cela a bien fonctionné pour moi.