在bash中并行执行curl请求


23

从bash脚本执行5个curl请求的最佳方法是什么parallel?由于性能原因,我无法串行运行它们。


1
您是否尝试过寻找解决方案的一部分?另一个问题SF似乎正好你问什么:serverfault.com/questions/248143/...
Theuni

Answers:


34

在命令后使用'&'来使进程后台运行,并使用'wait'等待它们完成。如果需要创建子外壳,请在命令周围使用“()”。

#!/bin/bash

curl -s -o foo http://example.com/file1 && echo "done1" &
curl -s -o bar http://example.com/file2 && echo "done2" & 
curl -s -o baz http://example.com/file3 && echo "done3" &

wait

简单,但第一步很有效。当事情需要更改时(例如主机名或重复次数),很快会受到黑客的攻击。谢谢。
克里斯(Chris)



0

这是一个curl示例xargs

$ cat URLS.txt | xargs -P 10 -n 1 curl

上面的示例应将curl每个URL并行,每次10个。在-n 1那里,因此每次执行xargs仅使用URLS.txt文件中的1行curl

每个xargs参数的作用是:

$ man xargs

-P maxprocs
             Parallel mode: run at most maxprocs invocations of utility at once.
-n number
             Set the maximum number of arguments taken from standard input for 
             each invocation of utility.  An invocation of utility will use less 
             than number standard input arguments if the number of bytes 
             accumulated (see the -s option) exceeds the specified size or there 
             are fewer than number arguments remaining for the last invocation of 
             utility.  The current default value for number is 5000.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.