2014-06-23 25 views
6

Pracuję na kilku różnych serwerach (do 25) przy użyciu GNU równoległego.GNU Parallel - które zadanie nie powiodło się?

skrypt powłoki, który realizuje to obecnie ma:

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 

gdzie some_list_of_servers jest tablicą i install_command jest, na przykład, git pobierania.

To, czego chcę, to więcej informacji, niż tylko liczba nieudanych prac. Chcę wiedzieć, które polecenie i który serwer się nie powiodło.

Przejrzałem stronę podręcznika systemowego, google i SO, ale nie mogę znaleźć przełączników, których szukam.

Każda pomoc wdzięcznie doceniona.

WeeDom

EDIT w odpowiedzi Odpowiedź 1:

Próbowałem tego i coś dziwnego się dzieje.

[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 

Nieważne ile gospodarze dodaję do -S, wydaje mi się dostać tylko ostatni, aby zakończyć w test.log

Dodałem kolejne pytanie tutaj: GNU Parallel - --joblog only logging last job

+0

tak, że to findable, powodem, że jestem tylko coraz jedna linia od --job-log polegała na tym, że korzystałem ze starej wersji równoległej, która miała znany błąd. Problem został rozwiązany przez aktualizację równoległą – WeeDom

Odpowiedz

5

Chcesz użyć --joblog option, jak pokazano w dokumentach. Równoległość Gnu pozwala nawet na ponowne uruchomienie tylko tych nieudanych z --resume-failed.

np działa ten skrypt:

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

na kilku hostów takich jak ten:

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

daje

$ 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

Krótszy z: -Ssrv {01..04} –

+0

wydaje się to absolutnie poprawne, ale mam problem z opcją --joblog - jest to rejestrowanie tylko ostatniego wykonanego zadania. Dodałem pytanie uzupełniające tutaj: http://stackoverflow.com/questions/24408726/gnu-parallel-joblog-only-logging-last-job – WeeDom

Powiązane problemy