我大约有十几个Linux机器,偶尔需要在其上运行相同的命令。从登录到每台计算机并一次运行命令,有没有一种更简便的方法(或自动方法)来执行此操作?并非总是相同的命令,也不是在预设时间,因此对于这类工具来说并不是理想的选择cron
。
我大约有十几个Linux机器,偶尔需要在其上运行相同的命令。从登录到每台计算机并一次运行命令,有没有一种更简便的方法(或自动方法)来执行此操作?并非总是相同的命令,也不是在预设时间,因此对于这类工具来说并不是理想的选择cron
。
Answers:
您可以尝试Capistrano。最初,它是Rails部署工具,但后来它可以在远程计算机上做很多事情。
有关对多台计算机进行管理的更完整方法,您可以尝试使用Chef。
Ansible具有执行临时命令的能力,并且还可以扩展为进行完整的配置管理。基于组的匹配能力非常好。
我想我将从Stack Overflow复制并粘贴我的答案,人们似乎对此很满意。。。
有一天,如何一次在多个服务器上运行命令的问题出现在Perl邮件列表上,我将给出与我在此处给出的相同建议,即使用gsh:http : //outflux.net/unix/软件/ gsh
gsh与for box in box1_name box2_name box3_name
已经给出的“ ”解决方案相似,但是我发现gsh更加方便。您设置了一个/ etc / ghosts文件,该文件包含组(例如Web,db,RHEL4,x86_64或其他任何文件(man ghost))中的服务器,然后在调用gsh时使用该组。
[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$
例如,您还可以使用web + db或web-RHEL4组合或拆分幻影组。
我还要提到,尽管我从未使用过shmux,但它的网站上包含一个软件列表(包括gsh),可让您一次在许多服务器上运行命令。 Capistrano已经被提及,并且(据我了解)也可能在该列表中。
您也可以尝试ssh [user@]hostname [command]
然后遍历主机名。
还可以看看func。Func使您可以使用模块体系结构来控制系统的各个方面,从处理程序包到运行命令等。它可以通过SSL在客户端/服务器模块上工作,并且还具有相当灵活的身份验证方案。
我使用过ClusterSSH,它可以正常工作。但是,超出一定数量的终端,扩展性就不好。
我很惊讶没有人提到xargs。Xargs非常适合大多数情况。实际上,我已经非常适应它,以至于我再也不会使用clusterssh了。
例
echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"
(在所有网络主机上重新启动apache。)
-P30
部分的意思是“并行运行30个”
您也可以尝试群集SSH(cssh)。我没有使用过它,但是LinuxJournal.com上有一篇文章叫做“有效地管理多个服务器”。
使用碟子,简单而强大!这个脚本改变了我的生活:)一个脚本统治了所有人!
http://nic-nac-project.org/~drimiks/gnu/dish.shtml
勤奋的外壳“盘”在多个系统上同时通过ssh / rsh / telnet / mysql执行命令。这样就可以轻松地在数百个节点上更改密码,更新配置,复制文件,检查状态等。Dish与IBM的“ dsh”(分布式外壳)相似,但是还允许远程执行需要身份验证的命令。与其他包括分布式外壳(或类似工具)(如ClusterIt,Dancer's shell,并行分布式外壳或C3)的开源软件包相比,在需要灵活解决方案的情况下,dish是一种纤巧且易于使用的远程外壳包装。您可以在此处在线浏览菜品的手册页。
以下是使用其他答案中提到的命令的一些示例:
可以取数字范围,首先输出主机名,似乎实际上得到了维护:
最简单的版本:
pdsh -w hostname echo done
输出:
hostname: done
更复杂的示例:
pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"
输出:
hostname8: done
hostname7: done
otherhost: done
苹果电脑: brew install pdsh
dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"
需要远程shell设置,否则将使用“ rsh”,它可能会或可能不会可用。
苹果电脑: brew install dsh
pssh -i -H user@host -H user@host "sleep 5 && echo done"
他们也可以选择从文件中获取计算机列表。
随意在此处添加更多示例,这是一个社区Wiki
苹果电脑: brew install pssh
群集SSH(“仅mac版本”显然有两个版本,另一个在这里)实际上打开了“真正的终端”,在底部有一个大终端,向其他所有终端发送输入。因此,就像一个将其发送到多个UI的UI。
例如:
csshX hostname0[1-2] hostname3
然后在红色框中键入内容,它会转到每个终端窗口(每个主机一个),然后弹出该窗口。
mac :(brew install csshx
旧版本,但仍然可以使用)
还有一个brew install ansible
FWIW