2016-06-30 9 views
1

Ich habe ein Array in Linux Shell-Skript. Array enthält eine Liste von Befehlen im Bash-Shell-Skript. Zum Beispiel:Wie kann ich den Exit-Code von einzelnen parallel laufenden Prozess von GNU Parallel

args =("ls","mv /abc/file1 /xyz/file2","hive -e 'select * from something'") 

nun diese Befehle in Array mit GNU parallel, wie ich bin Ausführung unten

parallel ::: "${args[@]}" 

Ich möchte den Statuscode der einzelnen Prozess überprüfen, wenn sie fertig sind. Ich bin mir bewusst, dass $? gibt mir die Anzahl der Prozess, die gescheitert sind, aber ich möchte den Exit-Code des einzelnen Prozesses wissen. Wie kann ich die Exit-Codes einzelner Prozesse in GNU parallel abfangen?

Antwort

0

--joblog Logfile

Logfile für ausgeführte Jobs. Speichern Sie eine Liste der ausgeführten Jobs im folgenden TAB-separierten Format in der Protokolldatei: Sequenznummer, sshlogin, Startzeit als Sekunden seit Epoche, Laufzeit in Sekunden, Bytes in Dateien übertragen, Bytes in Dateien zurückgegeben, Exit-Status, Signal, und Befehl ausführen.

+0

Das funktioniert auch. Vielen Dank . – npaluskar

0

Verwenden Sie die Option --halt 1, wodurch parallel beim Beenden des Befehls beendet wird, während der Exitcode zurückgegeben wird. Von man parallel:

--halt-on-error val 
--halt val 
     How should GNU parallel terminate if one of more jobs fail? 

     0  Do not halt if a job fails. Exit status will be the 
       number of jobs failed. This is the default. 

     1  Do not start new jobs if a job fails, but complete the 
       running jobs including cleanup. The exit status will be 
       the exit status from the last failing job. 

     2  Kill off all jobs immediately and exit without cleanup. 
       The exit status will be the exit status from the 
       failing job. 

     1-99% If val% of the jobs fail and minimum 3: Do not start 
       new jobs, but complete the running jobs including 
       cleanup. The exit status will be the exit status from 
       the last failing job. 
+0

Ja, es gibt Ihnen Status, wenn ein bestimmter Job endet als ---> parallel: Dieser Job ist fehlgeschlagen: "Ihr Befehl, der fehlgeschlagen ist". Es funktionierte . Vielen Dank. – npaluskar