对多个主机批量执行命令

内容纲要

在集群中执行同样命令时,需要频繁切换主机输入相同的命令。通过批量脚本可以将脚本命令分发到所有主机上执行

  1. 编写脚本
    #!/bin/bash
    #获取当前脚本所在路径
    s_dir=$(cd dirname $0; pwd)
    #读取同目录下ip文件名(不包含当前主机ip)ip
    #所有主机需提前配置好免密登录
    filename=$s_dir/ip
    #判断是否在当前机器执行命令
    if [ "true" = "$2" ]
    then
    echo "在当前主机执行传入的命令:$1"
    $1
    else
    echo "不在当前主机执行传入的命令"
    fi
    #循环向其它主机执行传入的命令
    while read -r line
    do
    echo "在主机$line上执行传入的命令:$1"
    ssh root@$line "$1"
    done < "$filename"

    脚本执行时发现值能访问第一个主机执行命令,循环体第二遍循环不执行,里面有坑网上解决办法暂时没看懂,采取将while改成for循环来解决。修改后的脚本如下:

    #!/bin/bash
    #获取当前脚本所在路径
    s_dir=$(cd dirname $0; pwd)
    #读取同目录下ip文件名不包含当前主机ipip
    #所有主机需提前配置好免密登录
    filename=$s_dir/ip
    #判断是否在当前机器执行命令
    if [ "true" = "$2" ]
    then
    echo "在当前主机执行传入的命令: $1"
    $1
    else
    echo "不在当前主机执行传入的命令"
    fi
    #循环向其它主机执行传入的命令
    iplist=awk '{print $1}' $filename
    echo "$iplist"
    for host in $iplist
    do
    echo "在主机$host上执行传入的命令: $1"
    ssh root@$host "$1"
    done

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注