2016-10-04 2 views
-4

Ich habe einige Ksh-Skripte geschrieben, etwa 6 Skripte und jeder sind etwa 50 Zeilen außer einer, die 300 Zeilen lang ist. Dies ist geschrieben, um riesige Datendateien zu verarbeiten, etwa 207 MB groß. Beim Ausführen des Skripts bleibt es manchmal hängen und endet nicht. Menschliche Unterbrechung ist erforderlich. In der Produktionsumgebung möchte ich, dass es automatisch ausgeführt wird und automatisch beendet werden sollte, wenn Probleme ohne menschliche Unterbrechung auftreten. Wenn Probleme mit einer Datei auftreten, muss das Skript beendet und die nächste Datei gestartet werden. Wie kann es sich selbst beenden, wenn es stecken bleibt .. d. H. Es muss stecken bleiben.Wie kann ich ein Ksh-Skript beenden, wenn irgendwelche Probleme?

+1

Einfach: Fix, was auch immer der Fehler in Ihrem Skript ist! – John3136

+0

Stimmt, ich mache das schon .. Aber manchmal kann etwas Unerwartetes passieren. Ich kann nicht jedes Problem vorhersehen. Gibt es irgendeinen Weg? – user6613676

+0

Willst du eine Art Timeout für einen Befehl, dauert es zu lange? – chepner

Antwort

0

Ich nehme an, dass die Probleme nur dadurch entstehen, dass das Skript zu lange dauert. In diesem Fall wird ein einfaches Skript, das den Prozess nach einer Auszeit tötet, soll ausreichend sein:

#!/bin/bash 
# Killersrcipt 
PID=$1 
TIME=$2 

typeset -i i 
i=0 

while [ $i -lt $TIME ] ; do 
    if ps $PID > /dev/null ; then 
     i=$i+1 
     sleep 1 
    else 
     exit 0 
    fi 
done 

kill $PID 

Ihr Workflow dann so etwas wie sein würde:

#!/bin/bash 
process_1 & 
killerscript $! 60 
process_2 & 
killerscript $! 30 
... 

Wenn Sie Fragen zu erkennen, haben andere Möglichkeiten Ihre Prozesse können Sie einfach in Ihrem Killerskript in die Schleife einfügen.

Verwandte Themen