Shell实战批量在多台服务器上执行命令

Posted HackHan技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell实战批量在多台服务器上执行命令相关的知识,希望对你有一定的参考价值。

功能说明:批量在多台服务器上执行命令

 1 #!/bin/bash
 2 
 3 # ==========================================
 4 # 功能:批量在多台服务器上执行命令
 5 # 方法:./batch_cmd_manager.sh <cmd_to_exec>
 6 # 返回:各服务器执行命令返回的结果列表
 7 # 前提:在待执行命令的各个服务器上设置了免密登录
 8 # 警告:禁止执行删除、格式化等这样的可能造成严重后果的命令
 9 # 日期:2018-04-23
10 #   By:HackHan
11 # 其他:设置免密登录参考:https://blog.csdn.net/zoombinde/article/details/51902208
12 # 文件:batch_cmd_manager.sh
13 # ==========================================
14 
15 
16 do_command()
17 {
18         hosts=`sed -n /^[^#]/p hostlist.txt`
19         for host in $hosts
20                 do
21                         echo ""
22                         echo HOST $host
23                         ssh $host "[email protected]"
24                 done
25         return 0
26 }
27 
28 
29 if [ $# != 1 ]
30 then
31         echo "=========================================="
32         echo "功能:批量在多台服务器上执行命令"
33         echo "方法:$0 \"<cmd_to_exec>\""
34         echo "返回:各服务器执行命令返回的结果列表"
35         echo "前提:在待执行命令的各个服务器上设置了免密登录"
36         echo "警告:禁止执行删除、格式化等这样的可能造成严重后果的命令"
37         echo "=========================================="
38         exit 1
39 fi
40 
41 
42 echo "确定要执行命令?[yes/no]:[email protected] "
43 read to_run
44 
45 local_ip=10.143.2.4
46 
47 if [ $to_run = "yes" -o $to_run = "YES" -o $to_run = "y" -o $to_run = "Y" ]
48 then
49         echo ""
50         echo -e "\033[31m执行命令 : [email protected] \033[0m"
51         do_command "[email protected]"
52         echo ""
53         echo HOST $local_ip
54         [email protected]
55 else
56         echo "取消执行命令!"
57 fi
58 
59 echo ""
60 echo "=========================================="

保存IP地址列表的文件hostlist.txt:

# IP地址列表,每行一个
xx.xx.xx.xx
xx.xx.xx.xxx
xxx.xxx.xx.xx

 

以上是关于Shell实战批量在多台服务器上执行命令的主要内容,如果未能解决你的问题,请参考以下文章

shell中怎么批量执行命令。

批量复制及执行命令shell脚本

Linux多台主机批量执行命令

Ansible(二)如何在多台主机上批量执行任务

批量远程执行命令

使用salt批量运维管理服务器最常用的3条命令