有时候我们需要在若干台linux主机上执行相同的命令,或者安装相同的软件,可以使用如下两种方法:
实验环境,有9台RHEL5.5_x64的主机,host表如下:
|
其中test-login为登陆节点,test-login到其他8台主机的ssh信任连接已经建立。
方法一:
for i in {1..8}; do ssh test-$i ‘hostname; mkdir –p /root/test’; done
如果ssh后面有多条命令要在远程主机上执行,必须用引号把所有的命令括起来,否则只会有第一条命令在远程主机上执行。
方法二:
安装tentakel, tentakel是一个可以在多台linux主机上执行相同命令的脚本。
下载tentakel-2.2.tgz,解压后make && make install
配制tentakel,把tentakel.conf.simple拷贝为/etc/tentakel.conf,编辑该配置文件:
|
上面这个配制文件定义了三个主机组,@test包括了test1-test8这8台节点,@test-login包括了test-login这台节点,@all包括了@test和@test-login这两个主机组,共9台节点。同时定义了默认主机组为@test。
常用的参数:
tentakel –l 列出可用的主机组
tentakel –g groupname‘command’在groupname上执行command,command要用引号引起来。
配置完成以后发现报错:
tentakel –g test ‘hostname’ Traceback (most recent call last): File “/usr/local/bin/tentakel”, line 42, in ? import lekatnet.error as error ImportError: No module named lekatnet.error |
原因是没有拷贝lekatnet文件:cp -r py/lekatnet/ /usr/lib/python2.4/site-packages/
tentakel –g test ‘mkdir –p /root/test’