Linux awk并行运行吗?
任务-SSH连接到650台服务器,从中获取一些详细信息,然后将完成的服务器名称写入不同的文件中。怎样才能更快地完成?如果我使用普通ssh,则需要7分钟。因此,我阅读了关于awk的文章,并编写了以下两个代码 你能解释一下下列代码的区别吗 代码1-Linux awk并行运行吗?,linux,bash,awk,ssh,parallel-processing,Linux,Bash,Awk,Ssh,Parallel Processing,任务-SSH连接到650台服务器,从中获取一些详细信息,然后将完成的服务器名称写入不同的文件中。怎样才能更快地完成?如果我使用普通ssh,则需要7分钟。因此,我阅读了关于awk的文章,并编写了以下两个代码 你能解释一下下列代码的区别吗 代码1- awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"} { print "blah"|"ssh -o StrictHostKeyChecking=no -o
awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
{
print "blah"|"ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname >/dev/null 2>&1";
print "$0" >> done_file
}' /tmp/linux
awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
{
"ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname 2>/dev/null"|getline output;
print output >> done_file
}' /tmp/linux
代码2-
awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
{
print "blah"|"ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname >/dev/null 2>&1";
print "$0" >> done_file
}' /tmp/linux
awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
{
"ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname 2>/dev/null"|getline output;
print output >> done_file
}' /tmp/linux
当我为650台服务器运行这些代码时,代码1需要-30秒,代码2需要7分钟?
为什么时差这么大
文件-/tmp/linux是650台服务器的列表更新的答案——感谢@OleTange 这种形式比我的建议更可取:
parallel -j 0 --tag --slf /tmp/linux --nonall 'hostname;ls'
--用参数标记标记行。每个输出行都将预先设置
使用参数和选项卡(\t)。当与--onall或
--所有行都将在前面加上sshlogin
相反
--nonall——不带参数的onall。在所有计算机上运行该命令
使用--sshlogin给定,但不接受任何参数。GNU平行意志
登录到--并行计算机的作业数并运行
计算机上的作业-j调整要登录的计算机数量
同时。
这对于在服务器上运行相同的命令(例如正常运行时间)非常有用
服务器列表
原始答案
我建议对该任务使用GNU Parallel
,如下所示:
parallel -j 64 -k -a /tmp/linux 'echo ssh user@{} "hostname; ls"'
它将以ssh方式并行运行64个主机(您可以更改数量),在每个主机上运行hostname
和ls
,然后按顺序向您提供所有结果(-k
开关)
当您看到echo的工作原理时,显然要删除它。我正在使用HPUX服务器来ssh运行在不同操作系统上的不同服务器(如RedHat、Aix、Solaris、HPUX本身)。此HPUX服务器没有此并行命令,也不允许我安装它。这些代码有什么不良影响吗?你不推荐这些吗?如果不是,那么为什么?
GNU Parallel
是一个Perl脚本-您不允许编写/使用Perl吗?对不起,我不能评论什么代码是好的或坏的,或者什么代码可以使用,什么代码不能使用——我想说的是,我相信GNU Parallel非常适合快速、准确、轻松地完成您的任务。可能还有其他方法,可能更好,也可能更糟,您可能被允许使用,也可能不被允许使用——如果有,那就好了;ls的“安装”可以像复制单个perl脚本一样简单。不需要Root。@OleTange再次感谢您的帮助和见解,Ole。