Forum général.général Déctection d'un process mort et relance

Posté par  .
Étiquettes : aucune
0
15
juil.
2005
Bonjour à tous

Je ne suis pas un spécialiste Linux et je cherche un peu d'aide.

J'ai un process qui s'arrête de temps à autre sans laisser de trace.
Je cherche donc un script bash qui serait toujours présent en parallèle pour vérifier la présence de mon process et ainsi le relancer automatiquement s'il est absent.

Le pid n'est jamais le même et le nom du process quand j'affiche ps est : /usr/local/manta

Quelqu'un aurait-il un script qui permette de vérifier la présence de ce process et de la relancer quand il est mort ?

Merci beaucoup de votre aide.
Cordialement
Didier
  • # un truc ....

    Posté par  . Évalué à 2.

    au vu des renseignements que tu donnes j'utiliserais quelquechose du genre :
    presence= ps aux | grep -c /usr/local/manta
    if [ "$presence" < 1 ]; then
    ta_commande_pour_relancer_ton_appli
    fi
    
    Voila il y à certainement mieux (enfin je le suppose) mais c'est ce que moi je ferais.
  • # dans une boucle

    Posté par  . Évalué à 2.

    un script de ce type :

    #------------8<-----------------
    #!/bin/sh
    to_start=/usr/bin/tonprog
    process_name=manta
    interval=60

    while true
    do
      if ! pidof ${process_name}
      then
        exec ${to_start}&
      else
        /bin/sleep ${interval}
      fi
    done
    #------------8<-----------------
  • # Quelques pistes

    Posté par  (site web personnel) . Évalué à 3.

    En général, pour faire ce genre de chose, on lance le process avec un script qui stocke quelque part le pid du process :

    # Lance ma_commande en tache de fond
    ma_commande &
    # Stocke le pid dans un fichier
    PID_FILE=/tmp/ma_commande.pid
    echo $! > /tmp/ma_commande.pid

    Le script qui check et relance ressemble à ça :

    PID_FILE=/tmp/ma_commande.pid
    PID=`cat $PID_FILE`
    while true ; do
    IS_ALIVE=`ps h $PID`
    if [ -z $IS_ALIVE ] ; then
    ma_commande &
    echo $! > /tmp/ma_commande.pid
    PID=`cat $PID_FILE`
    fi
    sleep 5
    done

    Si tu as besoin de commentaires, n'hésite pas

    "Liberté, Sécurité et Responsabilité sont les trois pointes d'un impossible triangle" Isabelle Autissier

    • [^] # Re: Quelques pistes

      Posté par  . Évalué à 1.

      A votre avis est ce que ce script pourrais fonctionner ?

      #!/bin/sh
      ma_commande &
      while true
      do
      done
      trap ma_commande & SIGCHLD
      • [^] # Re: Quelques pistes

        Posté par  (site web personnel) . Évalué à 3.

        Ca devrait fonctionner à condition de mettre des guillemets à la dernière ligne (jepense):
        trap 'ma_commande &' SIGCHLD
        Et la boucle infinie sans délais c'est pas une très bonne idée parce que le script va tirer sur le CPU en permanence.

        Une autre méthode serait (en admettant que "ma_commande" bloque et ne se "daemonise" pas toute seule):

        while true
        do
        ma_commande
        done
        Tout simplement.

        Tu peux aussi jeter un coup d'oeil à start-stop-daemon(8).

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.