【问题标题】:Does awk run parallelly?awk 是否并行运行?
【发布时间】:2015-10-20 07:47:49
【问题描述】:

TASK - 通过 SSH 连接到 650 个服务器并从中获取一些详细信息,然后将完成的服务器名称写入不同的文件中。如何以更快的方式做到这一点?如果我做正常的 ssh 需要 7 分钟。所以,我阅读了 awk 并编写了以下 2 个代码。

你能解释一下下面代码的区别吗?

代码 1 -

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

代码 2 -

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 个服务器的列表

【问题讨论】:

    标签: linux bash awk ssh parallel-processing


    【解决方案1】:

    更新答案 - 感谢@OleTange

    这种形式比我的建议更可取:

    parallel -j 0 --tag --slf /tmp/linux --nonall 'hostname;ls' 
    

    --tag 带有参数的标记行。每个输出行都将被前置 带有参数和 TAB (\t)。当与 --onall 或 --nonall 所有行都将在前面加上 sshlogin 而是。

    --nonall --onall 不带参数。在所有计算机上运行命令 与 --sshlogin 一起给出,但不带任何参数。 GNU 并行将 并行登录--jobs 计算机数量并运行 在计算机上工作。 -j 调整要登录的计算机数量 在平行下。 这对于运行相同的命令(例如正常运行时间)很有用 服务器列表。

    原答案

    我建议使用GNU Parallel 来完成这项任务,如下所示:

    parallel -j 64 -k -a /tmp/linux 'echo ssh user@{} "hostname; ls"'
    

    它将并行连接到 64 个主机(您可以更改数量),在每个主机上运行 hostnamels,然后按顺序为您提供所有结果(-k 开关)。

    当你看到echo是如何工作的时候,显然删除它。

    【讨论】:

    • 我正在使用 HPUX 服务器对运行在不同操作系统(如 RedHat、Aix、Solaris、HPUX 本身)上的不同服务器进行 ssh。这个 HPUX 服务器没有这个并行命令,我也不能安装它。这些代码是否有任何不良影响?你不推荐这些吗?如果不是,那为什么?
    • GNU Parallel 是一个 Perl 脚本 - 你不被允许编写/使用 Perl 吗?抱歉,我无法评论哪些代码是好是坏,或者您可以使用和不能使用哪些代码——我只是说我相信 GNU Parallel 非常适合快速、准确和轻松地完成您的任务。可能还有其他方法,可能更好或更差,您可能会或可能不会被允许使用 - 如果有,那很好。
    • 你需要使用 --nonall 代替:parallel -j 0 --tag --slf /tmp/linux --nonall 'hostname;ls'
    • “安装”可以像复制单个 perl 脚本一样简单。不需要根。
    • @OleTange 再次感谢您的帮助和见解,Ole。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多