我有一个gnu并行脚本,可以将数据(分配给100个远程服务器的100,000个作业)导入中央数据库。第一份工作是砰击中央数据库,因为它们几乎同时完成。之后的工作最终分散开来,并且不会同时尝试导入所有工作。
有没有办法延迟每个远程服务器执行第一个作业?因此脚本可以说"现在将进程#1运行到server1,在5秒内将进程#2运行到server2,在10秒内将进程#3运行到server3,在20秒内将进程#4运行到服务器4,... 。,..."。在第一批被发送到每个服务器之后,id就像要运行的其余进程一样as。
这是否有一个参数?
答案 0 :(得分:3)
--delay
和来自版本20130122的--sshdelay
。
=编辑=
--delay是从作业开始时开始计算的,所以如果你的作业运行时间超过延迟*作业点(例如100个服务器* 5秒),那么你会觉得好像没有延迟第一批。
比较
time parallel -S 2/: --delay 1 'sleep {};hostname' ::: 2 2
要:
time parallel -S 2/: --delay 1 'sleep {};hostname' ::: 2 2 2
第一个需要3秒,第二个4秒。
没有处理第一批的功能。你可以做的是:
parallel 'if [ {#} -lt 100 ] ; then sleep {#} ; fi; do_stuff {}'
其中100是第一批的大小。