web-dev-qa-db-fra.com

Comment superviser et redémarrer automatiquement un processus?

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.

  1. Quel est le moyen le plus simple de réaliser une telle fonctionnalité?
  2. Comment le configurer?
34
opc0de

Cette réponse s'applique aux versions Ubuntu avec Upstart (<= 14.10). Utilisez une autre approche pour les versions avec Systemd (> = 15.04).

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

Exemple

Supposons que nous voulions que l'application Calculatrice continue de fonctionner, même lorsqu'elle est tuée par le feu (signal 9).

  1. 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
    
  2. Commencez par courir

    Sudo start calculator
    
  3. 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é.

29
gertvdijk

Un outil extrêmement simple pouvant accomplir le même effet sans nécessiter de configuration est immortalname__: 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.

  • immortalctlname__: affiche le statut des travaux en cours. Il y a une colonne namequi 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.
13
extropic-engine

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.

1
Jan Święcki

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

https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal

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.

0
Nikolaus Correll

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.

0
cepal67

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.

0
Firegarden