冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了。你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个相同的命令,那别说执行命令了,就是让你依次手动登录上千台服务器,那也够你受的了。估计依次登录上千台服务器,给你三天时间你可能都登不完,那怎么办呢?有没有什么好的方法来解决这个问题呢?

别急,我们今天就是来解决这个问题的。

说实话,我在维护上千台服务器集群的时候,并没有去依次手动登录每台服务器,为啥?没错,就是因为我懒啊!我懒的去登录,并且依次登录那么多台服务器,整个人都会崩溃的。

于是,我就想办法能不能写个脚本,让这个脚本接收我要执行的命令,然后将命令依次分发到集群上所有的服务器中执行,这不就解决问题了吗?说干就干。

不过,这里,有个需要注意的地方:那就是:需要提前配置好集群中每台服务器的主机名和IP地址的对应关系,能够互相使用主机名进行通信,并配置了SSH免密码登录。这一点不行担心,只要让运维在规划和分配服务器的时候,规划好就行了,无需后面再依次登录服务器处理。

为了方便小伙伴们理解,这里我们就假设集群中存在1024台服务器,每台服务器的主机名为binghe1~binghe1024。每台服务器可以通过主机名进行通信,接下来,我写了一个名称为distribute_command.sh的脚本,内容如下所示。

#!/bin/bash
pcount=$#
if (( pcount<1 )) ; thenecho no args;exit;
fi
#先在本机上执行命令
echo ------------binghe$host-----------------
$@
#循环在集群中的远程节点上执行命令
for (( host=1 ; host<=1024; host=host+1)) ; doecho ------------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分钟之内就搞定了。所以,效率和质量才是做事情需要追求的目标。

我写了一个脚本,可在“任意”服务器上执行命令!相关推荐

  1. shell脚本ssh到远程服务器并执行命令

    shell远程执行: 经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了.一下介绍两种shell命令远程执行的方法. 前提条件: ...

  2. apache php 脚本,PHP脚本不在Apache服务器上执行

    问题描述 我刚刚重新安装了Apache和PHP5但是当我访问我的doc root时它只下载了一个"download"文件.当我尝试documentroot /index.php时, ...

  3. 我写了一个脚本,实现了图片分类问题的全自动化训练

    众所周知,图片分类问题属于计算机视觉中比较容易解决的问题之一 但 这几天被数据集的问题搞得焦头烂额, 照理说分类问题的数据集应该比较好制作 但 如果之前没有现成的数据集 也会变得比较麻烦 直到我偶然发 ...

  4. 给脚本添加到环境变量_让你的脚本可以在任意地方都可执行的几个方法

    大家好,我是良许. 我们知道,在 Linux 下写完一个脚本,通常情况下我们需要到脚本所在的目录,才可以执行这个脚本.但是大家有没注意到,像 ls .cd .pwd 这样的命令,它们的程序是位于 /b ...

  5. 集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star...

     [AI科技大本营导读]在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了.LibRec 是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测 ...

  6. 让你的Silverlight程序部署在任意服务器上

    今天在CSDN上逛,看到一篇不错的教程贴,"让你的SilverLight程序部署在任意服务器上",转到园子里,希望更多朋友受益. 即使是免费的只支持HTML的空间,同样可以部署Si ...

  7. PHP 脚本在服务器上执行

    什么是 PHP? PHP 是 "PHP Hypertext Preprocessor" 的首字母缩略词 PHP 是一种被广泛使用的开源脚本语言 PHP 脚本在服务器上执行 PHP ...

  8. 【Java】Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本

    Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本,同时解决了中文乱码的问题. 源代码和Jar包在这里下载:http://download.csdn.net ...

  9. 【Ubuntu】安装python环境(一个脚本编译安装任意版本)

    前言 最近弄了个新装的Ubuntu系统,尽管里面有自带的python3环境,但是没有我想要用的python版本环境,看到网上的各种编译安装,都是各种繁琐的步骤,其实也不利于一些计算机基础比较差的同学安 ...

最新文章

  1. Windows server 2003 IP路由配置
  2. 版本效果MoonWarrior cocos2d-x版本 --1
  3. hashmap为什么容量是2的n次方
  4. java 安装后找不到文件_(已解决)jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe...
  5. php页面代码简化,php代码如何简化
  6. MapReduce的shuffle阶段
  7. python火狐配置文件_Python+Selenium中级篇之4-封装一个自己的类-浏览器引擎类/Python读取配置文件内容...
  8. CNN经典模型:GoogLeNet(从Inception v1到v4的演进)
  9. 线性表9 - 数据结构和算法14
  10. c++ 文件读写(转)
  11. 计算机软件产品开发编写指南,计算机软件产品开发文件编制指南GB 8567-1988(6)[7]...
  12. MyBatis官方下载地址(含mybatis-spring)
  13. php fpm在哪配置,php配置php-fpm启动参数及配置详解
  14. 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...
  15. VirtualBox用 PQ与Fdisk 激活主分区(图解) 用于解决硬盘无法引导系统
  16. MeanTeacher文章解读+算法流程+核心代码详解
  17. 19:C语言之C循环-寻找完数
  18. 电脑安装了百度网盘,却无法在网页上调用客户端进行下载文件
  19. CAD图形的缩放——鸟瞰
  20. JSCC精研变频器B150使用说明

热门文章

  1. 教你如何运用python实现简单文件读写函数
  2. poj2029(二维树状数组)
  3. 费用流 -- 四川省赛F-Direction Setting [拆边成点+费用流]
  4. 模板 - 计算几何相关公式大全
  5. 0x21.搜索 - 树与图的遍历、拓扑排序
  6. e class connect.php,剖析帝国CMS核心文件e/class/connect.php中的常用函数
  7. poj2724(二分图匹配)
  8. mysql 工程师必备命令_mysql入门命令语句
  9. 从两个bug来看Javascript的装载
  10. Kaggle冠军经验分享丨如何用15个月冲到排行榜的首位