当前位置: 首页 > 后端技术 > Java

我写了一个在“任意”服务器上执行命令的脚本!

时间:2023-04-02 00:42:03 Java

大家好,我是冰河~~冰河之前维护过一个由几千台服务器组成的服务器集群。如果每次需要在服务器上执行命令都必须手动登录到每台服务器进行操作,那就太麻烦了。想一想,如果在一个上千台服务器的集群中,每台服务器只需要简单的执行同一条命令,别说执行命令了,你手动登录上千台服务器一台一台就够了。公认。估计你一台一台登录上千台服务器,可能三天都登录不上,怎么办?有什么好的方法可以解决这个问题吗?别担心,我们今天就是来解决这个问题的。老实说,我在维护一个上千台服务器的集群时,并没有一个一个手动登录到每台服务器上。为什么?没错,就是因为我懒!懒得登录了,一个一个登录那么多服务器,整个人都要崩溃了。于是,我想能不能写一个脚本,让脚本接收到我要执行的命令,然后把命令分发到集群上的所有服务器上去执行。这不就解决问题了吗?去做就对了。不过这里,有一点需要注意:那就是:需要提前配置好集群中各个服务器的主机名和IP地址的对应关系,相互之间可以通过主机名进行通信,并配置SSH免密登录。这个不用担心,只要运维规划好,分配好服务器就可以了,以后不用一个一个登陆服务器。为了方便朋友们,这里我们假设集群中有1024台服务器,每台服务器的主机名为binghe1~binghe1024。每个服务器都可以通过主机名进行通信,接下来,我写了一个名为distribute_command.sh的脚本,内容如下。#!/bin/bashpcount=$#if((pcount<1));然后不回显任何参数;exit;fi#先在本机执行命令echo------------binghe$host----------------$@#循环执行集群中远程节点上的命令for((host=1;host<=1024;host=host+1));做echo----------binghe$host----------------sshbinghe$host$@done;这个脚本的意思是:接收传递过来的命令,分发到主机名为binghe1~binghe1024的服务器上执行,也就是说使用这个脚本我们可以做到:同时在集群中的服务器上执行相同的命令时间。接下来,向distribute_command.sh脚本授予可执行权限,如下所示。chmoda+x./distribute_command.sh使用格式如下:./distribute_command.sh在服务器上执行的完整命令示例在集群中各服务器的/home目录下创建一个hello.txt文件,内容如下是你好世界。/distribute_command.shecho"helloworld">>/home/hello.txt查看集群中各服务器上的hello.txt文件内容/distribute_command.shcat/home/hello.txt删除各服务器上的文件在集群hello.txt文件./distribute_command.shrm-rf/home/hello.txt是不是很简单啊?所以,有时候,不要盲目执行。很多时候,在做一件事情之前,你不得不思考是否有更好的解决方案,或者更高效的解决方案。这篇文章提到,要在几千台服务器上执行一条命令,如果手动登录每台服务器依次执行命令,可能要三天才能搞定;如果我们写一个脚本,估计1分钟就搞定了。所以效率和质量是做事需要追求的目标。好了,今天就到这里吧,我是冰河,下次见~~