shell批量执行脚本

2,481 阅读2分钟

引言:更多相关请看 个人系列 ,关于shell基础请看shell教程
在实际开发中,我们可能针对多个linux服务器执行同样的命令:每个服务器都去一一执行一遍特别麻烦,所以写了一个批量执行脚本。

配置服务器集群信息

这里不细说

[root@salve2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.31.82.11 master
172.31.82.12 slave1
172.31.82.13 slave2

配置hostname

[root@salve2 ~]# cat /etc/hostname 
salve2

配置ssh免密登录

1.生成密钥:
ssh-keygen -t rsa(默认位于 ~/.ssh/)
2. 拷贝公钥到所有机器:
ssh-copy-id root@master
ssh-copy-id root@slave1
ssh-copy-id root@slave2
3.测试免密登录:
ssh master
ssh slave1
ssh slave2

slaves文件

[root@salve2 ~]# cat /root/slaves
master
slave1
slave2

赋予权限

[root@salve2 ~]# chmod /root/slaves

批量脚本

[root@salve2 ~]# cat /root/bin/cmall 
#!/bin/bash
#  $@  :将命令行中提供的所有参数作为同一个字符串中的多个单词处理,允许进行迭代
echo "command param: $@" # 打印输入参数
# 迭代循环salves文件内容
for i in `cat /root/slaves`
do
echo "========== $i ==========" 
echo $i $@
    # ssh免密执行
    ssh $i $@
#   echo $?
done

赋予权限

[root@salve2 ~]# chmod /root/bin/cmall

测试

[root@salve2 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  432K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1        99G  2.4G   92G   3% /
tmpfs           783M     0  783M   0% /run/user/0
[root@salve2 ~]# ssh master df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  536K  7.8G   1% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vda1        99G  5.8G   89G   7% /
tmpfs           1.6G     0  1.6G   0% /run/user/0
[root@salve2 ~]# cmall df -h
command param: df -h
========== master ==========
master df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  536K  7.8G   1% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vda1        99G  5.8G   89G   7% /
tmpfs           1.6G     0  1.6G   0% /run/user/0
========== slave1 ==========
slave1 df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  464K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1        99G  2.4G   92G   3% /
tmpfs           783M     0  783M   0% /run/user/0
========== slave2 ==========
slave2 df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  464K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1        99G  2.4G   92G   3% /
tmpfs           783M     0  783M   0% /run/user/0
[root@salve2 ~]# cmall cat /root/slaves 
command param: cat /root/slaves
========== master ==========
master cat /root/slaves
master
slave1
slave2
========== slave1 ==========
slave1 cat /root/slaves
master
slave1
slave2
========== slave2 ==========
slave2 cat /root/slaves
master
slave1
slave2

注意:ll命令在ssh中不能执行,找不到命令。

[root@salve2 ~]# ll /root
total 8
drwxr-xr-x 2 root root 4096 Jun  7 18:08 bin
-rwxr-xr-x 1 root root   21 Jun  7 17:30 slaves
[root@salve2 ~]# ssh slave1 ll /root
bash: ll: command not found
[root@salve2 ~]# cmall ll /root
command param: ll /root
========== master ==========
master ll /root
bash: ll: command not found
========== slave1 ==========
slave1 ll /root
bash: ll: command not found
========== slave2 ==========
slave2 ll /root
bash: ll: command not found