【问题标题】:GNU Parallel - which job failed?GNU Parallel - 哪个作业失败了?
【发布时间】:2014-06-23 15:55:08
【问题描述】:

我正在使用 GNU 并行在几个不同的服务器(最多 25 个)上运行作业。

目前实现这一点的 shell 脚本是这样的:

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

其中 some_list_of_servers 是一个数组,而 install_command 是例如 git fetch。

我想要的是更多信息,而不仅仅是有多少工作失败了。我想知道哪个命令和哪个服务器失败了。

我已经浏览了手册页、谷歌和 SO,但找不到我正在寻找的开关。

感谢任何帮助。

WeeDom

针对答案 1 进行编辑:

我试过了,但发生了一些奇怪的事情。

weedom@host1: ~/$ 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
weedom@host1: ~/$ cat test.log
Seq     Host    Starttime       Runtime Send    Receive Exitval Signal  Command
1       host1        1403689277.067  0.519999980926514       0       0       0      0       uptime

无论我添加多少主机到-S,我似乎只能将最后一个完成到test.log中

我在这里添加了一个后续问题:GNU Parallel - --joblog only logging last job

【问题讨论】:

  • 只是为了便于查找,我只从 --job-log 中得到一行的原因是我使用的是旧版本的并行程序,它有一个已知的错误。问题已通过并行升级解决

标签: bash parallel-processing


【解决方案1】:

您想使用--joblog option,如文档中所示。 Gnu parallel 甚至允许使用 --resume-failed 重新启动失败的那些。

例如,运行这个脚本:

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

在几个这样的主机上:

$ 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

【讨论】:

  • 短于:-Ssrv{01..04}
  • 这似乎完全正确,但我在使用 --joblog 选项时遇到了问题 - 它只记录最后运行的作业。我在这里添加了一个后续问题:stackoverflow.com/questions/24408726/…
猜你喜欢
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多