我正在运行一个脚本来同时运行 100 个元素的 SSH 会话,但我的服务器一次只能允许访问 10 个元素。我的脚本如下:
cat ip | while read ip
do
connect.sh $ip >> ip.OK &
done
connect.sh
是通过 SSH 连接到所有 IP 并运行特定命令的主要脚本。
我如何修改我的脚本以运行 100 个元素,将其分成每个会话 10 个,从而使脚本内部有 10 个会话?
答案1
您可以使用以下命令xargs
:
cat ip|xargs -P 10 -n 1 connect.sh >> ip.OK
-P
给出并行任务的数量,-n
表示connect.sh
应该一次给出 1 个参数。
parallel
是一个类似的命令。
它并不严格等同于将 100 除以 10 的原理,但它将更有效地使用允许的 10 个连接,并且每次完成 connect.sh 时都会启动一个新的连接。
如果您想要单独的输出文件:
cat ip|xargs -P 10 -n 1 -I {} sh -c 'connect.sh {} >> {}.OK'
这里{}
将被各个参数替换。
答案2
此示例代码将每 10 行循环等待 60 秒:
maxcnt=10
fcnt=0
while read -r fname
do
echo "execute command for $fname"
((++fcnt % maxcnt == 0)) && sleep 60
done < file.txt