GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Skript, um zu überprüfen, ob der Prozess ausgeführt wird, und auf das Ergebnis zu reagieren

Ich habe dein Skript für meine Situation übernommen 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

Beim Testen bin ich auf ein Problem gestoßen. Ich habe 3 zusätzliche Prozesse von oscam1 mit dieser Zeile gestartet:/usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 was mich mit 8 prozess für oscam1 zurückließ. Das Problem ist folgendes:Wenn ich das Skript ausführe, tötet es nur 2 Prozesse gleichzeitig, also müsste ich es 3 Mal ausführen, um es auf 2 Prozesse zu reduzieren..

Außer killall -9 oscam1 gefolgt von /usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 , in *) Gibt es eine bessere Möglichkeit, abgesehen vom ursprünglichen Prozess zu killall? Es gäbe also keine Ausfallzeit?


Programme zur Überwachung, ob ein Prozess auf einem System läuft.

Skript wird in crontab gespeichert und läuft einmal pro Minute.

Dies funktioniert, wenn der Prozess nicht ausgeführt wird oder der Prozess mehrmals ausgeführt wird:

#! /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 Wenn der Prozess nicht gefunden wird, starten Sie ihn neu.
1 Wenn Prozess gefunden wird, alles ok.
* Wenn 2 oder mehr Prozesse laufen, beenden Sie den letzten.

Eine einfachere Version. Testen Sie einfach, ob der Prozess läuft, und starten Sie ihn neu, wenn nicht.

Es testet nur das Exit-Flag $? ab pidof Programm. Es wird 0 sein des Prozesses läuft und 1 wenn nicht.

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

Und zuletzt ein Einzeiler

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

Dies kann dann in crontab verwendet werden, um jede Minute wie folgt auszuführen:

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

cccam oscam


Ich habe die @Jotne-Lösung übernommen und funktioniert perfekt! Zum Beispiel für den Mongodb-Server in meinem 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. So überprüfen Sie die Betriebssystem- und Linux-Version

  2. Das Ergebnis von Ls * , Ls ** und Ls ***?

  3. Linux – Wie erhalte ich die Uhrzeit eines laufenden Prozesses?

  4. Überprüfen Sie die laufenden Dienste unter Linux

  5. Linux-Befehl, um zu prüfen, ob ein Shell-Skript ausgeführt wird oder nicht

So überprüfen Sie alle laufenden Dienste in Linux

So überprüfen Sie die Passwortkomplexität in Linux

So überprüfen Sie den Runlevel unter Linux

So finden und beenden Sie laufende Prozesse in Linux

Überprüfen Sie die Zeitzone in Linux

So finden Sie die PID und PPID eines Prozesses in Linux