我有一个bash脚本可以将数据上传到网站。我的上传速度很慢,所以我开始使用xargs和-N1同时并行运行5个。
然而,问题是服务器要求我解决验证码,如果我一次运行5,而它一次正常工作。
我认为这是因为所有进程都在同一时间开始,我被标记了。
无论如何所以这就是问题,我有什么方法可以在xargs / gnu parallel中的启动过程之间添加等待(比如说1秒)吗?
我唯一能想到的就是使用pgrep脚本| wc -1计算脚本实例,并睡眠该秒数。
然而,这真的不是最佳的,有没有更好的方法呢?
答案 0 :(得分:4)
如果上传需要一段随机的时间,你只需要前5个开始延迟1-5秒:
cat list | parallel -j5 [ {#} -lt 6 ] \&\& sleep {#}\; upload {}
答案 1 :(得分:2)
我觉得你只想要一个循环,而不是使用xargs,就像在
中一样for i in {1..5}; do sleep 5; your-command & done
每隔5秒就会执行一次命令。对于延迟增加(如果需要):
for i in {1..5}; do ((w=i*5)); sleep $w; your-command & done
另一种选择:
files="a.txt b.txt c.txt"
for i in $files; do upload-command $i& sleep 5; done
答案 2 :(得分:1)
这可能适合你(使用GNU parallel):
find . -type f -name "*.txt" -print | parallel 'script {} & sleep 1'
这是一个显示示例运行的终端会话:
for x in {a..c};do for y in {1..3};do echo $x >>$x;done;done
ls
a b c
cat a
a
a
a
cat /tmp/job
#!/bin/bash
sed -i -e '1e date' -e 's/./\U&/' $1
sleep 5
sed -i '${p;s,.*,date,e}' $1
find . -type f -name "?" -print | parallel '/tmp/job {} & sleep 1'
cat ?
Sat Mar 10 20:25:10 GMT-1 2012
A
A
A
Sat Mar 10 20:25:15 GMT-1 2012
Sat Mar 10 20:25:09 GMT-1 2012
B
B
B
Sat Mar 10 20:25:14 GMT-1 2012
Sat Mar 10 20:25:08 GMT-1 2012
C
C
C
Sat Mar 10 20:25:13 GMT-1 2012
正如你所看到的那样,每个作业分开一秒,即文件c从08开始,在13结束,文件b 09到14,并提交10到15。
答案 3 :(得分:0)
您可以使用
在每个进程后暂停脚本执行read -p "Press [Enter] key to continue..".
现在您可以根据自己的意愿决定何时开始下一个过程..
我同意这涉及人工干预。但是因为在这种特殊情况下只有5个进程可以启动,所以应该可以正常工作。
编辑:当read
停止自动操作时,您可以使用
sleep 5
将睡5秒钟。