%20%E9%80%89%E9%A1%B9%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%E6%97%B6%E4%BC%9A%E5%BF%BD%E7%95%A5%20(--sshlogin)%20%E5%B1%9E%E6%80%A7%E9%A1%BA%E5%BA%8F.png)
这是我的示例,我请求作业先在 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