有时候我们需要在若干台linux主机上执行相同的命令,或者安装相同的软件,可以使用如下两种方法:
实验环境,有9台RHEL5.5_x64的主机,host表如下:
test-1 10.9.1.1
test-2 10.9.1.2
test-3 10.9.1.3
test-4 10.9.1.4
test-5 10.9.1.5
test-6 10.9.1.6
test-7 10.9.1.7
test-8 10.9.1.8
test-login 10.10.1.1
其中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,编辑该配置文件:
# first section: global parameters
set ssh_path=”/usr/bin/ssh” //设置ssh的路径
set method=”ssh” //设置命令使用的方法,先ssh到目标主机,然后执行相关的命令
#set user=”root” # 设置ssh时使用的帐号,如果不指定,用户为使用tentakel的帐号
#set format=”%d %o\n”
#set maxparallel=”3″ # run at most 3 commands in parallel
# second section: groups
group default () //默认的组,也可以使用-g参数指定不同的主机组
@test
group test ()
+test-1
+test-2
+test-3
+test-4
+test-5
+test-6
+test-7
+test-8
group test-login ()
+test-login
group all ()
@test
@test-login
上面这个配制文件定义了三个主机组,@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’