2014-04-14 8 views
8

ich ein Skript für den Start parallel rsync Prozess gemacht hatte:wie Exit-Code zu erhalten, wenn xargs (parallel) mit

#! /bin/bash 
LIST=$1 
DEST_DIR=$2 
RSYNC_OPTS=$3 
#echo "rsyncing From=$SRC_DIR To=$DEST_DIR RSYNC_OPTS=$RSYNC_OPTS" 
echo $LIST|xargs -n1 -d, echo|xargs -n1 -P 0 -I% rsync --rsync-path='sudo rsync' ${RSYNC_OPTS} % ${DEST_DIR} 

Dann habe ich Probleme den Exit-Status des rsync-Prozess zu bekommen. Ich weiß, dass es möglich ist, ein Array von Pipestatus zu bekommen, aber ich muss den Exit-Code abfangen, um zu wissen, ob das rsync erfolgreich gemacht wurde oder nicht.

Wer weiß?

+0

Sie haben bereits '$ PIPESTATUS' erwähnt:' $ {PIPESTATUS [2]} 'enthält den Exit-Status des zweiten' xargs' Befehls. Dies wird 123 sein, wenn 'rsync' mit einem Status von 1-125 beendet wird (siehe Abschnitt zum Beenden des Status hier: http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs) –

+0

Hallo Josh, danke für deine Antwort. Nichtsdestotrotz brauche ich den Exit-Code des Rysnc, nicht den Xargs-Exit-Code. Etwas wie dieses: http://wpkg.org/Rsync_exit_codes – bLuEdDy

+0

Nicht sicher, dass Sie in der Lage wären, den rsync spezifischen Ausgangsstatus unter Verwendung der xargs so zu erhalten, wird es durch xargs maskiert. Vielleicht könntest du stattdessen '$ LIST' durchlaufen? –

Antwort

6

Die Manpage xargs zeigt die möglichen Werte Exit-Status, es kann jedoch nur einen einzigen aggregierten Exit-Code erzeugen, nicht einen Exit-Code pro Kind, das es läuft. Sie könnten eine dieser Optionen versuchen:

  • den Prozess haben, dass Spawns druckt seinen Exit-Code xargs und hat die übergeordnete Aufgabe, alle Ausgänge Exit-Code analysiert den Exit-Code für jeden rsync zu bestimmen. Verwenden Sie GNU parallel mit der --joblog Option. Dadurch wird eine Datei erstellt, die alle Befehle enthält, die zusammen mit ihrem Beendigungscode und anderen Informationen parallel ausgeführt wurden. Diese Datei könnte dann geparst werden, nachdem parallel beendet wurde, um festzustellen, welche rsync-Befehle fehlgeschlagen sind, und ihre jeweiligen Fehlercodes.