Linux-一次在多台计算机上运行同一命令


39

我大约有十几个Linux机器,偶尔需要在其上运行相同的命令。从登录到每台计算机并一次运行命令,有没有一种更简便的方法(或自动方法)来执行此操作?并非总是相同的命令,也不是在预设时间,因此对于这类工具来说并不是理想的选择cron



最后的规范列表:)
rogerdpack '18

Answers:


12

嗯,也许pconsole是您想要的工具。


哇,pconsole看起来很酷!我安装它没有问题,到目前为止看起来还不错。谢谢!
克里斯·邦奇

这也是我最喜欢的工具之一。:) np
节点


8

您应该在此处查看Puppet的有关其设置和使用的linux.com 文章


1
嗯,木偶看起来很有趣。如果pconsole开始让我失望,我将对其进行研究,因为我已经运行了它,而且比学习Puppet的语言还容易。还是)感谢你的建议!
克里斯·邦奇

特别是,木偶集合工具(也称为mcollective或mco)。它是puppet的一部分,可让您根据puppet的事实在一组主机上执行操作。
布赖恩·明顿


8

您可以尝试Capistrano。最初,它是Rails部署工具,但后来它可以在远程计算机上做很多事情。

有关对多台计算机进行管理的更完整方法,您可以尝试使用Chef



6

我想我将从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已经被提及,并且(据我了解)也可能在该列表中。


5

如果您在KDE桌面上,则konsole具有“将输入发送到所有会话”选项。它适用于在同一konsole窗口中打开的所有会话。


5

您也可以尝试ssh [user@]hostname [command]然后遍历主机名。


2
这并不能真正满足“立即”部分(它是序列化的,而不是并行的),但是由于这似乎不是问题主体的要求,因此这可能也是一个不错的解决方案。
voretaq7 2011年

4

还可以看看func。Func使您可以使用模块体系结构来控制系统的各个方面,从处理程序包到运行命令等。它可以通过SSL在客户端/服务器模块上工作,并且还具有相当灵活的身份验证方案。


随之,Func由Red Hat构建,并且可能会在将来的Fedora / RHEL产品中得到扩展使用。这绝对是一个值得关注的问题,因为我希望它将成为此类问题的事实上的标准解决方案。
Christopher Cashell

4

我使用过ClusterSSH,它可以正常工作。但是,超出一定数量的终端,扩展性就不好。

我很惊讶没有人提到xargs。Xargs非常适合大多数情况。实际上,我已经非常适应它,以至于我再也不会使用clusterssh了。

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(在所有网络主机上重新启动apache。)


对于追随者而言,该-P30部分的意思是“并行运行30个”
rogerdpack

4

如果您已经是tmux用户,则可以使用tmux-cssh(代表TMUX-C(luster)-SSH)。您给它提供了一个服务器名称列表,它会打开一个新的tmux窗口,并在其自己的窗格中向每个服务器打开SSH会话。所有击键都将复制到每个窗口。根据主机的数量,输出可能很难读取。


1
一个班轮链接不一定有用。请描述一下。您为什么推荐此工具?
鹿猎人

3

其他工具是:

RunDeck也可以称为轻量级ControlTier。

这些工具不仅为您提供集群外壳,还为您提供Web前端,您可以保存作业以备将来使用。



1

使用碟子,简单而强大!这个脚本改变了我的生活:)一个脚本统治了所有人!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

勤奋的外壳“盘”在多个系统上同时通过ssh / rsh / telnet / mysql执行命令。这样就可以轻松地在数百个节点上更改密码,更新配置,复制文件,检查状态等。Dish与IBM的“ dsh”(分布式外壳)相似,但是还允许远程执行需要身份验证的命令。与其他包括分布式外壳(或类似工具)(如ClusterIt,Dancer's shell,并行分布式外壳或C3)的开源软件包相比,在需要灵活解决方案的情况下,dish是一种纤巧且易于使用的远程外壳包装。您可以在此处在线浏览菜品的手册页。


1

以下是使用其他答案中提到的命令的一些示例:

pdsh

可以取数字范围,首先输出主机名,似乎实际上得到了维护

最简单的版本:

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

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

需要远程shell设置,否则将使用“ rsh”,它可能会或可能不会可用。

苹果电脑: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

他们也可以选择从文件中获取计算机列表。

随意在此处添加更多示例,这是一个社区Wiki

苹果电脑: brew install pssh

群集SSH

群集SSH(“仅mac版本”显然有两个版本,另一个在这里)实际上打开了“真正的终端”,在底部有一个大终端,向其他所有终端发送输入。因此,就像一个将其发送到多个UI的UI。

例如:

csshX hostname0[1-2] hostname3 然后在红色框中键入内容,它会转到每个终端窗口(每个主机一个),然后弹出该窗口。

mac :(brew install csshx旧版本,但仍然可以使用)

还有一个brew install ansibleFWIW

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.