这是我的示例,我请求作业先在 LNXVP1262 上运行,然后再在 LNXVP1251 上启动。
date ; echo 'hostname;date;sleep 10;date' | parallel --no-run-if-empty --will-cite --onall --keep-order --joblog ${runDir}/jobLog.txt --results ${runDir}/resultsDir --jobs 1 --sshlogin LNXVP1262,LNXVP1251
结果:
Wed Sep 6 17:35:01 EDT 2023
LNXVP1251
Wed Sep 6 17:35:02 EDT 2023
Wed Sep 6 17:35:12 EDT 2023
LNXVP1262
Wed Sep 6 17:35:13 EDT 2023
Wed Sep 6 17:35:23 EDT 2023
我如何确保结果是:
2023 年 9 月 6 日星期三 17:35:01 EDT
LNXVP1262
Wed Sep 6 17:35:02 EDT 2023
Wed Sep 6 17:35:12 EDT 2023
LNXVP1251
Wed Sep 6 17:35:13 EDT 2023
Wed Sep 6 17:35:23 EDT 2023
(--sshlogin) 登录顺序是否始终按字母顺序排列(我假设)或者是否有办法强制排序。我猜想有一种黑客手段是按排序顺序创建 SSH 机器别名,并希望并行可以使用别名,但这样很丑陋。
答案1
从man parallel
:
--keep-order
-k Keep sequence of output same as the order of input.
:
If used with --onall or --nonall the output will grouped by
sshlogin in sorted order.
因此sshlogin
使用时 s 将进行排序-k
。
如果不使用,则-k
输出的顺序将基于哪个作业先完成。
在命令行中给出的顺序sshlogin
不起作用:
$ parallel --sshdelay 1 --tag -S127.0.0.{22,1,33,222,11,3,2,111} --onall echo ::: foo
127.0.0.1 foo
127.0.0.11 foo
127.0.0.111 foo
127.0.0.2 foo
127.0.0.22 foo
127.0.0.222 foo
127.0.0.3 foo
127.0.0.33 foo
$ parallel --sshdelay 1 --tag -S127.0.0.{22,33,11,222,111,1,3,2} --onall echo ::: foo
127.0.0.1 foo
127.0.0.11 foo
127.0.0.111 foo
127.0.0.2 foo
127.0.0.22 foo
127.0.0.222 foo
127.0.0.3 foo
127.0.0.33 foo