So erkennen Sie, ob ein bestimmter Prozess 1 Stunde lang in der Shell ausgeführt wird oder nicht

So erkennen Sie, ob ein bestimmter Prozess 1 Stunde lang in der Shell ausgeführt wird oder nicht

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, pgrepum 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

SECONDSist eine spezielle Variable in Bash, die die Anzahl der Sekunden seit dem Start des Skripts enthält. pgrep testsucht nach einem Prozess namens test. Wenn keiner gefunden wird, beenden wir das Skript. Wenn nicht, sleepwarten wir 10 Minuten.

Wenn wir nicht beendet haben, pgrepwar der Vorgang erfolgreich. Also echo success.

verwandte Informationen