Linux 集群上批量执行同一命令 shell 脚本

因实际开发需要,在集群上多个机器上执行相同的命令,比如执行一个指定的脚本、删除相同目录下的文件(这个得慎重~~)等,组内的成员开发了一个 allscp (可以批量执行scp 命令来同步线上代码)非常好用,我自己也写了一个,主要是使用ssh 登陆到一个服务器上,然后执行一个指定的命令。 

先贴Shell 代码:

#!/bin/bash                                          
if [ "$#" -ne 2 ] ; then                             
    echo "USAGE: $0 -f server_list_file cmd"         
    exit -1                                          
fi                                                   
                                                     
file_name=$1                                         
cmd_str=$2                                           
                                                     
cwd=$(pwd)                                           
cd $cwd                                              
serverlist_file="$cwd/$file_name"                    
                                                     
if [ ! -e $serverlist_file ] ; then                  
    echo 'server.list not exist';                    
    exit 0                                           
fi                                                   
                                                     
while read line                                      
do                                                   
    #echo $line                                      
    if [ -n "$line" ] ; then                         
        echo "DOING--->>>>>" $line "<<<<<<<"         
        ssh $line $cmd_str < /dev/null > /dev/null                                                                                                                    
        if [ $? -eq 0 ] ; then                       
            echo "$cmd_str done!"                    
        else                                         
            echo "error: " $?                        
        fi                                           
    fi                                               
done < $serverlist_file 


代码很简单,不解释。 

使用方法:

1. 新建一个文件,文件中为服务器的地址,每个一行;

2. 保存上面shell 脚本, 如保存为 allcmd.sh,注意使用 chmod +x allcmd.sh 使之成为可执行脚本;

3. 运行 allcmd.sh  host_file_list md 即可, host_file_list 是第1步的文件名(记得和 allcmd.sh 放在相同目录下), cmd 就是要执行的命令,用单引号包起来,如删除/home/nuaazdh/下面的一个 tmp.txt 文件:  allcmd.sh host_file_list  'rm /home/nuaazdh/tmp.txt' 

4. done!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值