Wie handle Fehler/Ausnahme in shell-Skript?
Unten ist mein Skript, das ich bin ausführt, in der bash. Und es funktioniert gut.
fileexist=0
for i in $( ls /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done); do
mv /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done /data/read-only/clv/daily/archieve-wip/
fileexist=1
done
Anweisung Problem:-
In meinem obigen shell-script, welches ausgeführt werden, die täglich cron job
ich habe keine error/exception handling mechanism
. Nehme an, wenn etwas falsch beantwortet, dann weiß ich nicht, was passiert ist?
Als nach dem obigen script ausgeführt wird, gibt es some other scripts that will be dependent on the data provided by above script
, so bekomme ich immer die Beschwerde von den anderen Menschen, die je auf mein script Daten, dass etwas falsch ist passiert.
Also gibt es eine Möglichkeit, ich kann get notified if anything wrong has happened
in meinem Skript? Angenommen, wenn die cluster is having some maintenance
und ich bin mit meinem script, also auf jeden Fall wird es scheitern, das ist sicher, so kann ich benachrichtigt werden, wenn meine oben genannten Skripts fehlgeschlagen, so dass ich sicher etwas falsch ist passiert.
Hoffe meine Frage ist klar genug.
Irgendwelche Gedanken werden sehr geschätzt.
Ja, ich denke, das sieht viel besser aus und ist besser lesbar, nicht einschüchtern potenzielle Helfer entfernt 🙂
Yup.. Danke für den Rat. Ich werde sicher das nächste mal ganz sicher. 🙂
InformationsquelleAutor arsenal | 2012-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überprüfen, ob der exit-status jedes Kommando, als freetx beantwortet, aber dies ist die manuelle Fehlerüberprüfung eher als Ausnahme behandeln. Der standard-Weg, um das äquivalent von exception handling in
sh
ist, um das Skript zu starten mitset -e
. Das sagtsh
zu beenden mit einem nicht-null-status, sobald alle ausgeführten Befehl fehlschlägt (D. H. beendet mit einem nicht-null exit status).Wenn es bestimmt ist, für einen Befehl in einem solchen Skript (möglicherweise) scheitern, können Sie verwenden das Konstrukt
COMMAND || true
, wird die Kraft von einer null exit status für diesen Ausdruck. Zum Beispiel:Einen anderen Weg, um sicherzustellen, dass Sie benachrichtigt werden, wenn die Dinge schief gehen in einem Skript per cron aufgerufen wird, um sich an die Unix-Konvention von drucken nichts, es sei denn, ein Fehler aufgetreten. Erfolgreich läuft wird dann übergeben, ohne Vorherige Ankündigung, und nicht erfolgreich ausgeführt wird, führen Sie den cron-daemon zu informieren Sie über den Fehler per E-Mail. Beachten Sie, dass die lokale mail-Zustellung muss ordnungsgemäß konfiguriert werden, auf Ihrem system zu arbeiten.
InformationsquelleAutor user4815162342
Ihrer üblichen für jedes unix-Befehlszeile-Dienstprogramm auf 0 zurück bei Erfolg und ungleich null bei einem Fehler. Daher können Sie die $? Muster zum anzeigen der letzten return-Wert und behandeln die Dinge entsprechend.
Zum Beispiel:
Daher können Sie diese als rudimentäre Fehlererkennung, um zu sehen, wenn etwas schief geht. So ist der normale Ansatz wäre
if ! some_command; then
... Viele Menschen scheinen nicht zu realisieren, dass der einzige Zweck derif
ist, um einen Befehl auszuführen und untersuchen Sie den exit-code für Erfolg oder Fehler-status.InformationsquelleAutor freetx
gut, wenn andere Skripte auf der gleichen Maschine laufen, dann kann man eine pgrep in anderen Skripts für dieses Skript, wenn Sie schlafen für eine Weile und versuchen, andere Skripte später Nachkontrolle Prozess ist gegangen.
Wenn das script auf einer anderen Maschine oder sogar lokale die andere Methode ist das erstellen einer temp-Datei auf remote-Rechner zugänglich, läuft über einen http-browser, dass andere Skripts können Sie auf status prüfen, z.B. laufen oder abgeschlossen
Könnte man auch entweder wrap-Skript, um eine andere sieht, die für diese Fehler und die E-Mails die Sie, wenn er Sie findet, wenn nicht sendet das Ergebnis als normal, immer
InformationsquelleAutor Vahid