Hallo! Ich habe folgendes Problem. In einem kleinen Sync-Script würde ich gerne den Rückgabewert des rsync-Kommandos abfangen. Da aber immer n Rechner gleichzeitig gesynct werden, schicke ich das rsync in den Hintergrund. Wie nun frage ich Erfolg oder Mißerfolg ab? Zur Verdeutlichung hier ein Auszug: for pc in ${pcs[*]}; do echo -en "Syncing Files with client-pc $pc" for f in `ls /`; do rsync --exclude "/media" --exclude "/mnt" --exclude "/proc" \ --exclude "/root/.ssh" --exclude "/etc/HOSTNAME" \ --exclude "/etc/sysconfig/network" -av -e ssh \ --delete $f $pc:/ 1>/dev/null 2>./${pc}_faillog done [ "$?" -ne "0" ] && echo -e "failed! Check faillog\n" || echo -e "done\n" klappt wunderbar. Leider nimmt er sich die Jungs dann einzeln vor und wartet ab, bis einer fertig ist, bevor er mit dem nächsten anfängt. Sobald ich aber den rsync mit ... & als bg laufen lasse, kommt (natürlich) überhaupt keine Rückmeldung. Ich stelle mir vor, die pid des Prozesses abzufangen (wie?) und (wieder: wie?) zu warten, bis alle durchgelaufen sind, um dann (wie?) die Rückgaben der einzelnen pid-identifizierten Prozesse auszuwerten. Hat jemand dazu eine Idee? Danke und herzliche Grüße, Christoph
Christoph fragte:
Ich habe folgendes Problem. In einem kleinen Sync-Script würde ich gern e den Rückgabewert des rsync-Kommandos abfangen. Da aber immer n Rechner gleichzeitig gesynct werden, schicke ich das rsync in den Hintergrund. Wie nun frage ich Erfolg oder Mißerfolg ab?
Zur Verdeutlichung hier ein Auszug:
for pc in ${pcs[*]}; do echo -en "Syncing Files with client-pc $pc" for f in `ls /`; do rsync --exclude "/media" --exclude "/mnt" --exclude "/proc" \ --exclude "/root/.ssh" --exclude "/etc/HOSTNAME" \ --exclude "/etc/sysconfig/network" -av -e ssh \ --delete $f $pc:/ 1>/dev/null 2>./${pc}_faillog done [ "$?" -ne "0" ] && echo -e "failed! Check faillog\n" || echo -e "done\n"
klappt wunderbar. Leider nimmt er sich die Jungs dann einzeln vor und wartet ab, bis einer fertig ist, bevor er mit dem nächsten anfängt.
Sobald ich aber den rsync mit ... & als bg laufen lasse, kommt (natürlich) überhaupt keine Rückmeldung.
Ich würd's etwa so machen (skizziert und ungetestet): for ... ; do for f in ...; do (rsync ... || echo -e "failed!..." ) & done done Kann das Deine Aufgabe lösen?
Ich stelle mir vor, die pid des Prozesses abzufangen (wie?) und (wieder: wie?) zu warten, bis alle durchgelaufen sind, um dann (wie?) die Rückgaben der einzelnen pid-identifizierten Prozesse auszuwerten.
Geht sicher auch irgendwie. I.d.R. gibt es immer mehrere Alternativen. Ralph -- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -------------------------------------------------- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualitätssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post
Ralph Mueller schrieb:
Ich würd's etwa so machen (skizziert und ungetestet):
for ... ; do for f in ...; do (rsync ... || echo -e "failed!..." ) & done done
Kann das Deine Aufgabe lösen?
*Boing* Ja, vielen dank! Da denkt man erst um 100 Ecken anstatt die naheliegendste Lösung zu nehmen... Herzliche Grüße, Christoph
participants (2)
-
Christoph Bohm
-
Ralph Mueller