Mein Prozessname ist test
. Wenn ich benutze
ps -ef | grep test
Ich sehe, dass der Prozess läuft. Jetzt möchte ich dies eine Stunde lang alle 10 Minuten überprüfen und „Erfolgreich“ ausgeben, wenn er eine Stunde lang erfolgreich läuft. Wie gehe ich dabei am besten vor?
Antwort1
Sie können eine Schleife verwenden while
; hier verwende ich sie, pgrep
um zu prüfen, ob der Prozess ausgeführt wird:
#!/bin/bash
counter=0
while :; do
[ "$counter" -eq 6 ] && break
if pgrep <process_name> &>/dev/null; then
echo "Success !!"
(( counter += 1 ))
sleep 10m
else
echo "Process not running..exiting !!"
break
fi
done
Ersetzen Sie es <process_name>
durch den tatsächlichen Namen des Prozesses, den Sie verfolgen möchten.
Antwort2
Eine einfache Schleife in einem Skript:
#! /bin/bash
start=$SECONDS
while (( SECONDS - start < 3600 ))
do
sleep 10m
pgrep -f test &>- || exit
done
echo success
SECONDS
ist eine spezielle Variable in Bash, die die Anzahl der Sekunden seit dem Start des Skripts enthält. pgrep test
sucht nach einem Prozess namens test
. Wenn keiner gefunden wird, beenden wir das Skript. Wenn nicht, sleep
warten wir 10 Minuten.
Wenn wir nicht beendet haben, pgrep
war der Vorgang erfolgreich. Also echo success
.