2014-06-23 3 views
6

Sto eseguendo un lavoro su diversi server (fino a 25) usando GNU parallelo.GNU Parallelo - quale lavoro è fallito?

Lo script che implementa questo momento fa:

parallel --tag --nonall -S $some_list_of_servers "some_command" 
state=$? 
echo -n "RESULT: " 
if [ "$state" -eq "0" ] 
then 
    echo "All jobs successful" 
else 
    echo "$state jobs failed" 
fi 
return $state 

dove some_list_of_servers è un array, e install_command è, per esempio, git fetch.

Quello che voglio sono MOLTE informazioni più di quanti lavori hanno fallito. Voglio sapere quale comando, e quale server, non è riuscito.

Ho visitato la pagina man e google e SO ma non riesco a trovare gli switch che sto cercando.

Qualsiasi aiuto è gradito.

WeeDom

EDIT in risposta a Risposta 1:

ho provato questo, e qualcosa di strano sta accadendo.

[email protected]: ~/$ parallel --tag --nonall -j8 --joblog test.log -S host1,host2 uptime 
host2 10:41:17 up 36 days, 20:45, 1 user, load average: 0.00, 0.00, 0.00 
host1   10:41:17 up 22:34, 3 users, load average: 0.06, 0.11, 0.04 
[email protected]: ~/$ cat test.log 
Seq  Host Starttime  Runtime Send Receive Exitval Signal Command 
1  host1  1403689277.067 0.519999980926514  0  0  0  0  uptime 

Non importa quante host che aggiungo a -S, mi sembra di ottenere solo l'ultimo a completare in test.log

Ho una domanda di follow-up qui: GNU Parallel - --joblog only logging last job

+0

solo in modo che sia rintracciabile, la ragione per cui ero ottenendo soltanto una riga di --job-log era che stavo usando una vecchia versione di parallelo che aveva un bug noto. Il problema è stato risolto aggiornando parallelo – WeeDom

risposta

5

Si desidera utilizzare --joblog option, come mostrato nei documenti. Gnu parallelamente consente anche di riavviare solo quelli guasti con --resume-failed.

ad esempio, l'esecuzione di questo script:

#!/bin/bash 
jobmod=$(($1 % 3)) 
if [ $jobmod == 0 ] 
then 
    exit 1 
else 
    exit 0 
fi 

su diversi host come questo:

$ seq 1 10 | parallel --joblog out.log -S "srv01,srv02,srv03,srv04" ./failjob 

$ more out.log 
Seq Host Starttime Runtime Send Receive Exitval Signal Command 
1 srv01 1403542514.713 0.267 0 0 0 0 ./failjob 1 
3 srv02 1403542514.717 0.266 0 0 1 0 ./failjob 3 
4 srv03 1403542514.719 0.266 0 0 0 0 ./failjob 4 
2 srv04 1403542514.715 0.397 0 0 0 0 ./failjob 2 
5 srv01 1403542514.983 0.231 0 0 0 0 ./failjob 5 
6 srv02 1403542514.986 0.368 0 0 1 0 ./failjob 6 
7 srv03 1403542514.988 0.388 0 0 0 0 ./failjob 7 
8 srv04 1403542515.121 0.437 0 0 0 0 ./failjob 8 
9 srv01 1403542515.221 0.343 0 0 1 0 ./failjob 9 
10 srv02 1403542515.356 0.388 0 0 0 0 ./failjob 10 
+0

Più breve con: -Ssrv {01..04} –

+0

questo sembra assolutamente giusto, ma sto avendo un problema con l'opzione --joblog - è solo la registrazione dell'ultimo lavoro che è stato eseguito. Ho aggiunto una domanda di follow-up qui: http://stackoverflow.com/questions/24408726/gnu-parallel-joblog-only-logging-last-job – WeeDom