Shell-Skript Für Das Prozess-Monitoring
Diese
#!/bin/bash
if [ `ps -ef | grep "91.34.124.35" | grep -v grep | wc -l` -eq 0 ]; then sh home/asfd.sh; fi
oder?
ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
if [ "$?" -ne "0" ]
then
sh home/asfd.sh
else
echo "Process is running fine"
fi
Hallo, wie kann ich schreiben Sie ein shell-Skript, das sieht in laufende Prozesse und wenn es nicht einen Prozess namens MIT 91.34.124.35 führen Sie dann eine Datei in einem bestimmten Ort, und ich will diese fahren alle 30 Sekunden in einer Endlosschleife, ich glaube, es war ein sleep-Befehl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie nicht cron verwenden, da auf die Umsetzung ich weiß die kleinste Einheit ist eine minute. Sie können schlafen, aber dann ist dein Prozess wird immer ausgeführt werden (mit cron es begann jedes mal).
Verwenden nur schlafen
Wenn Ihr
pgrep
hat die Möglichkeit-q
zu unterdrücken Ausgang (wie bei BSD) kann man auchpgrep -q
ohne Umleitung der Ausgabe auf/dev/null
if
bedingte!
. Auch mit Hilfepgrep
- was immer schließt sich - stattps
+grep
, dieif
- Anweisung kann vereinfacht werden zu:if ! pgrep -f '91\.34\.124\.35' > /dev/null; then
pgrep -q
funktioniert nicht auf Linux, leider; daher meine> /dev/null
Umleitung; (a) Sie müssen-f
um das Spiel gegen den gesamten command-line, nicht nur den Namen des Prozesses, und (b) Sie nicht brauchen, die[9]
trick, wenn Siepgrep
(pgrep
nicht mit sich standardmäßig aktiviert); wenn Sie das update erneut, bitte auch die änderungen in der Kugel Punkte unter dem code.Zunächst, Sie sollten in der Lage sein zu reduzieren, das Skript einfach
Ausführen dies alle 30 Sekunden via cron (weil cron läuft nur jede minute) benötigen Sie 2 Einträge - ein, um den Befehl auszuführen, anderen zu verzögern für 30 Sekunden, bevor Sie laufen den gleichen Befehl erneut aus. Zum Beispiel:
Machen diese Reiniger, die Sie möglicherweise in der Lage, erste store der Befehl in einer Variablen zu, und verwenden Sie es für beide Einträge. (Ich noch nicht getestet).
p.s. Die oben geht davon aus, das Sie hinzufügen, dass zu
/etc/crontab
. Verwenden Sie es in einem user-crontab (crontab -e
) einfach weglassen, den Benutzernamen (root
) vor dem Befehl.Ich würde vorschlagen, mit
watch
:Cron verwenden für "- Schleife alle 30 Sekunden" Teil.
So oder so in Ordnung ist, können Sie es speichern in eine .sh-Datei und fügen Sie es in die crontab alle 30 Sekunden. Lassen Sie mich wissen, wenn Sie wissen möchten, wie die crontab.
Versuchen Sie dies:
Nicht zu benutzen brauchen
test
.if
selbst untersuchen wird der exit-code.if ps -ef | grep -q "[9]1\.34\.124\.35"; then ...
. Die eckigen Klammern helfen filter aus der grep-Prozess aus den Ergebnissen.Können Sie speichern Sie das Skript in Datei-Namen, myscript.sh
dann können Sie die Ausführung des Skripts durch cron,
oder Sie verwenden können, während
Dank.
Habe ich gefunden deamonizing kritische Skripte sehr effektiv.
Können Sie
monit
für diese Aufgabe. Siehe Doku. Es ist verfügbar auf den meisten linux-Distributionen und verfügt über eine einfache config. Einige finden Beispiele in diesem BeitragFür Ihre app wird es so Aussehen
Wenn monit ist nicht verfügbar für Ihre Plattform, die Sie verwenden können,supervisord.
Fand ich auch diese Frage sehr ähnlich Wiederholen Sie den Befehl automatisch in Linux. Es empfiehlt
watch
.