Чтобы получить существующий статус отдельных заданий, parallel
нужно будет куда-то записать информацию. Я не знаю, так это или нет. Если это не так, вы можете сделать это самостоятельно.
my %jobs = (
"date" => "date",
"ls" => "ls",
"pwd" => "pwd",
"factor" => "factor 17",
);
open(my $parallel, "|parallel");
for my $id (keys(%jobs)) {
print $parallel
$jobs{$id}
." 1> '/tmp/$id.out'"
." 2> '/tmp/$id.err' ; "
."echo \$?"
." > '/tmp/$id.exit'\n";
}
close($parallel);
my $exit_status = $? >> 8;
if ($exit_status >= 255) {
print("Failed\n");
} else {
printf("%d failed jobs\n", $exit_status);
}
for my $id (keys(%jobs)) {
...grab output and exit code from files...
}
Обновление: я пошел и установил parallel
.
У него есть опция --joblog {file}
, которая создает отчет с кодами выхода. Он принимает -
для имени файла, если вы хотите, чтобы он выводился в STDOUT.
Обратите внимание, что parallel
не распознает ненормальную смерть по сигналу, поэтому это не включено в отчет --joblog
. Используя решение, которое я опубликовал выше, отсутствующий файл .exit будет указывать на ненормальную смерть. (Однако вы должны убедиться, что его не существует в первую очередь.)
person
ikegami
schedule
10.06.2011