GNU/Linux >> Tutoriels Linux >  >> Linux

Script Linux pour vérifier si le processus est en cours d'exécution et agir sur le résultat

J'ai adopté votre script pour ma situation Jotne.

#! /bin/bash

logfile="/var/oscamlog/oscam1check.log"

case "$(pidof oscam1 | wc -w)" in

0)  echo "oscam1 not running, restarting oscam1:     $(date)" >> $logfile
    /usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 &
    ;;
2)  echo "oscam1 running, all OK:     $(date)" >> $logfile
    ;;
*)  echo "multiple instances of oscam1 running. Stopping & restarting oscam1:     $(date)" >> $logfile
    kill $(pidof oscam1 | awk '{print $1}')
    ;;
esac

Pendant que je testais, j'ai rencontré un problème. J'ai démarré 3 processus supplémentaires d'oscam1 avec cette ligne :/usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 ce qui m'a laissé avec 8 processus pour oscam1. le problème est le suivant..Quand j'exécute le script, il ne tue que 2 processus à la fois, donc je devrais l'exécuter 3 fois pour le réduire à 2 processus..

Autre que killall -9 oscam1 suivi de /usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 , en *) existe-t-il un meilleur moyen de tout tuer en dehors du processus d'origine ? Il n'y aurait donc aucun temps d'arrêt ?


Programmes pour surveiller si un processus sur un système est en cours d'exécution.

Le script est stocké dans crontab et s'exécute une fois par minute.

Cela fonctionne si le processus n'est pas en cours d'exécution ou si le processus s'exécute plusieurs fois :

#! /bin/bash

case "$(pidof amadeus.x86 | wc -w)" in

0)  echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt
    /etc/amadeus/amadeus.x86 &
    ;;
1)  # all ok
    ;;
*)  echo "Removed double Amadeus: $(date)" >> /var/log/amadeus.txt
    kill $(pidof amadeus.x86 | awk '{print $1}')
    ;;
esac

0 Si le processus n'est pas trouvé, redémarrez-le.
1 Si le processus est trouvé, tout va bien.
* Si processus en cours d'exécution 2 ou plus, tuez le dernier.

Une version simplifiée. Cela teste simplement si le processus est en cours d'exécution, et sinon, redémarrez-le.

Il teste juste le drapeau de sortie $? à partir du pidof programme. Ce sera 0 du processus est en cours d'exécution et 1 sinon.

#!/bin/bash
pidof  amadeus.x86 >/dev/null
if [[ $? -ne 0 ]] ; then
        echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt
        /etc/amadeus/amadeus.x86 &
fi

Et enfin, une ligne

pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &

Cela peut ensuite être utilisé dans crontab pour s'exécuter toutes les minutes comme ceci :

* * * * * pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &

cccam oscam


J'ai adopté la solution @Jotne et fonctionne parfaitement ! Par exemple pour le serveur mongodb dans mon NAS

#! /bin/bash

case "$(pidof mongod | wc -w)" in

0)  echo "Restarting mongod:"
    mongod --config mongodb.conf
    ;;
1)  echo "mongod already running"
    ;;
esac

Linux
  1. Le Résultat De Ls * , Ls ** Et Ls *** ?

  2. Vérifier les services en cours d'exécution sous Linux

  3. Comment vérifier si un processus est toujours en cours d'exécution en utilisant Python sous Linux ?

  4. Vérifier la limite FD ouverte pour un processus donné sous Linux

  5. Commande Linux pour vérifier si un script shell est en cours d'exécution ou non

Comment vérifier tous les services en cours d'exécution sous Linux

Comment vérifier la complexité du mot de passe sous Linux

Comment vérifier le niveau d'exécution sous Linux

Comment trouver et tuer les processus en cours d'exécution sous Linux

Vérifier le fuseau horaire sous Linux

Comment trouver le PID et le PPID d'un processus sous Linux