Der wait-Befehl wird ignoriert oder funktioniert nicht, wenn das Shell-Skript über cron aufgerufen wird

373
RameshMathur Mulagaleti

Wir haben die Anforderung, den Status des Agenten zu überwachen. Das Skript funktioniert einwandfrei, wenn sh .sh ausgeführt wird, um den Status des Agenten zu erhalten. Es ist 55s erforderlich, um die Ausgabe in eine Datei zu schreiben. Ich habe diesen Befehl verwendet, um das Backend auszuführen und zu warten, bis der Befehl abgeschlossen ist funktioniert nicht, wenn das Skript durch cron geplant ist, es wartet nicht, bis der Befehl abgeschlossen ist

Ich schätze jede Hilfe in dieser Hinsicht

unten sind crontab einträge

########################OEM Script Monitoring################################# 0,10,20,30,40,50 * * * * /export/home/oraoem/scripts/emck.sh > /dev/null 2>&1  -- cat emck.sh #!/bin/bash cd /export/home/oraoem/scripts DBALIST="ramesh.mathur@zap.com"; export DBALIST rm -f agent.exist ps -ef | grep emagent | grep -v grep > agent.exist if [ -s agent.exist ] then cd $MY_AGENT_HOME/bin ./emctl status agent > /export/home/oraoem/scripts/agent.txt & echo $! wait $!  grep "Number of XML files pending upload" /export/home/oraoem/scripts/agent.txt > /export/home/oraoem/scripts/agent6.txt a=$(awk '' /export/home/oraoem/scripts/agent6.txt) b=$(grep "Agent is Running and Ready" /export/home/oraoem/scripts/agent.txt) d=("Agent is Running and Ready") if [ "$b" != "$d" ] then echo "OEM Agent is Not running ... .. " | mail -s "OEM Agent down on `hostname`" $DBALIST elif [[ $a -gt 3 ]] then echo "Number of XML files pending upload : $a" | mail -s "OEM Agent upload problem on `hostname`" $DBALIST fi else echo "OEM Agent down on `hostname`." | mail -s " OEM Agent down on `hostname`" $DBALIST fi  ##echo "OEM Agent is up and running on `hostname`." | mail -s " OEM Agent up and running on `hostname`" $DBALIST 
0

1 Antwort auf die Frage

-1
sebastienvg

Versuchen Sie, "wait" durch "sleep" zu ersetzen.

Dies wird nicht wie erwartet funktionieren. `wait $!` bedeutet, bis die letzte Hintergrundaufgabe abgeschlossen ist. `sleep $!` bedeutet eine Anzahl Sekunden warten, die der PID der letzten Hintergrundaufgabe entspricht. Wenn eine PID sehr hoch sein kann (über 20.000), möchten Sie diesen Befehl wirklich * nicht * ausführen. Nathan.Eilisha Shiraini vor 7 Jahren 1
Ja, es braucht mehr Zeit und das, was ich als Beobachter unter dem Befehl finde, wird der Emctl Status Agent 50 Sekunden brauchen, um die Ausgabe von cron zu generieren. Er wartet nicht, bis die Ausgabe in die agent.txt-Datei geschrieben wird emck.sh eine Idee dazu RameshMathur Mulagaleti vor 7 Jahren 0