

我写了一个脚本,可在“任意”服务器上执行命令!
source link: https://segmentfault.com/a/1190000040734937
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我写了一个脚本,可在“任意”服务器上执行命令!
大家好,我是冰河~~
冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了。你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个相同的命令,那别说执行命令了,就是让你依次手动登录上千台服务器,那也够你受的了。估计依次登录上千台服务器,给你三天时间你可能都登不完,那怎么办呢?有没有什么好的方法来解决这个问题呢?
别急,我们今天就是来解决这个问题的。
说实话,我在维护上千台服务器集群的时候,并没有去依次手动登录每台服务器,为啥?没错,就是因为我懒啊!我懒的去登录,并且依次登录那么多台服务器,整个人都会崩溃的。
于是,我就想办法能不能写个脚本,让这个脚本接收我要执行的命令,然后将命令依次分发到集群上所有的服务器中执行,这不就解决问题了吗?说干就干。
不过,这里,有个需要注意的地方:那就是:需要提前配置好集群中每台服务器的主机名和IP地址的对应关系,能够互相使用主机名进行通信,并配置了SSH免密码登录。这一点不行担心,只要让运维在规划和分配服务器的时候,规划好就行了,无需后面再依次登录服务器处理。
为了方便小伙伴们理解,这里我们就假设集群中存在1024台服务器,每台服务器的主机名为binghe1~binghe1024。每台服务器可以通过主机名进行通信,接下来,我写了一个名称为distribute_command.sh的脚本,内容如下所示。
#!/bin/bash pcount=$# if (( pcount<1 )) ; then echo no args; exit; fi #先在本机上执行命令 echo ------------binghe$host----------------- $@ #循环在集群中的远程节点上执行命令 for (( host=1 ; host<=1024; host=host+1)) ; do echo ------------binghe$host----------------- ssh binghe$host $@ done;
这个脚本的含义为:接收传递进来的命令,将命令分发到主机名为binghe1~binghe1024的服务器上执行,也就是说,使用这个脚本我们能够做到:同时在集群的服务器上执行相同的命令。
接下来,为distribute_command.sh脚本赋予可执行权限,如下所示。
chmod a+x ./distribute_command.sh
使用格式如下:
./distribute_command.sh 在服务器上执行的完整命令
使用示例
- 在集群中的每台服务器的/home目录下创建hello.txt文,内容为hello world
./distribute_command.sh echo "hello world" >> /home/hello.txt
- 查看集群中每台服务器上hello.txt文件的内容
./distribute_command.sh cat /home/hello.txt
- 删除集群中每台服务器上的hello.txt文件
./distribute_command.sh rm -rf /home/hello.txt
是不是很简单啊?所以说,有时候,不要盲目的去执行。很多时候,在做事情之前,要先思考下有没有更好的解决方案,有没有效率更加高效的解决方案。就比如这篇文章上说的,在上千台服务器上执行一条命令,如果依次手动登录每台服务器执行命令,估计花三天时间都搞不定;如果我们写了一个脚本的话,估计也就1分钟之内就搞定了。所以,效率和质量才是做事情需要追求的目标。
好了,今天就到这儿吧,我是冰河,我们下期见~~
Recommend
-
97
Python - @hellolleh - # Image transfer to txt--### Usage```shell$ python3 img_to_txt.py [file/url] [size]```##
-
14
搭建一个可在公网访问的直播服务器 2020-09-19 直播 以下仅仅为个人的搭建记录,食用时请根据自己的实际情况进...
-
8
2021-06-30 01:37 Fetch.ai推出DeFi工具包,可在Uniswap v2和PancakeSwap上执行自动化操作 巴比特讯,6月29日,人工智能实验室Fetch.ai发文宣布推出DeFi工具包DeFi Agent,可在Uniswap v2和PancakeSwap上根据...
-
12
写了一个图书馆学位论文下载脚本,有版权问题吗? [复制链接] 分享: 楼主
-
7
我用Python写了一个邮箱脚本发给班花,没想到事情闹大了... ...
-
4
清明节假期第一天上午,你居然还在家写代码 😥️ 前排防 etc: 虽然但是,偶然还是会看一下百度百科嘛,虽然不咋地,不如 wikipedia Greasy Fork 地址
-
6
腾讯虽然一直不当人,但微信阅读的体验一直很不错,里面的出版书资源相当丰富,而且都是统统免费阅读,相比之下,亚马逊的 Kindle Unlimited 就显得太寒酸了。 腾讯当然不会这么好心,现在是他们用巨额资本排除竞争对手的阶段,在这样的攻势面前,其他电...
-
15
V2EX › 程序员 写了一个 node 脚本,如何让其他人不用安装 node 也可以直接使用呢
-
11
写了一个阿里云盘自动签到脚本 February 20, 2023 https://github.com/bboysoulcn/aliyunpan-sign...
-
4
我写了一个脚本,工作效率瞬间提升近1000倍! 作者:冰河 2023-12-28 08:01:59 是不是很简单啊?所以说,有时候,不要盲目的去执行。很多时候,在做事情之前,要先思考下有没有更好的解决方案,有没有效率更加高效...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK