当服务器每个会话仅允许 10 个元素时,如何打开同时包含 100 个元素的 SSH 会话?

当服务器每个会话仅允许 10 个元素时,如何打开同时包含 100 个元素的 SSH 会话?

我正在运行一个脚本来同时运行 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

模仿帖子 bash 脚本以 25 行一组的方式处理 9000 行文本

相关内容