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!

你可能感兴趣的:(Shell)