发布时间:2019-09-12 07:54:32编辑:auto阅读(2196)
在多台linux主机上执行相同的命令
By tianjing on 2011 年 06 月 05 日
有时候我们需要在若干台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’
sun grid engine简单使用
1. 安装sge
安装master节点:
安装执行主机:
1.配置主机的host表。
2.把要安装的目标主机添加为管理主机: qconf –ah hkdev-4
3.在目标节点上新建sgeadmin用户,拷贝整个安装包到目标主机
4.配置service 端口:
Vim /etc/service添加两行:
   sge_qmaster  50001/tcp 
   sge_execd    50002/tcp
5. 把头节点的/opt/gridengine拷贝到计算节点,运行./install_execd,默认安装即可。
6. 设置环境变量vim /etc/profile.d/sge.sh
SGE_ROOT=/home/sgeadmin/sgeroot; export SGE_ROOT
ARCH=`$SGE_ROOT/util/arch` 
DEFAULTMANPATH=`$SGE_ROOT/util/arch -m` 
MANTYPE=`$SGE_ROOT/util/arch -mt`
SGE_CELL=sgetest; export SGE_CELL 
SGE_CLUSTER_NAME=p50001; export SGE_CLUSTER_NAME 
unset SGE_QMASTER_PORT 
unset SGE_EXECD_PORT
if [ "$MANPATH" = "" ]; then 
   MANPATH=$DEFAULTMANPATH 
fi 
MANPATH=$SGE_ROOT/$MANTYPE:$MANPATH; export MANPATH
PATH=$SGE_ROOT/bin/$ARCH:$PATH; export PATH 
# library path setting required only for architectures where RUNPATH is not supported 
case $ARCH in 
sol*|lx*|hp11-64) 
   ;; 
*) 
   shlib_path_name=`$SGE_ROOT/util/arch -lib` 
   old_value=`eval echo ‘$’$shlib_path_name` 
   if [ x$old_value = x ]; then 
      eval $shlib_path_name=$SGE_ROOT/lib/$ARCH 
   else 
      eval $shlib_path_name=$SGE_ROOT/lib/$ARCH:$old_value 
   fi 
   export $shlib_path_name 
   unset shlib_path_name old_value 
   ;; 
esac 
unset ARCH DEFAULTMANPATH MANTYPE
注意:1.sge整个安装包的用户和组权限应该是sgeadmin,sge目录应该保证其他用户可读。
2.要求关闭防火墙或者打开端口,我选择了关闭防火墙
2.添加队列:
新建一个队列hiseq.q:
[root@hkdevlogin-1 ~]# qconf -aq hiseq.q //队列名
qname                 hiseq.q   //队列名 
hostlist              @hiseqhosts  //主机组,定义这个队列中包含的所有主机 
seq_no                0
…
slot 100 //可以使用的资源
…
notify                00:00:60 
owner_list            NONE 
user_lists            dms                //用户列表,这个列表中的用户允许使用该队列,其他的用户不允许使用该队列 
xuser_lists           NONE
qconf –sql 可以查看所有的队列
[root@hkdevlogin-1 ~]# qconf -sql 
all.q 
hiseq.q 
prs.q
qconf –sq 队列名 可以查看某一个队列的配置信息
定义@hiseqhosts主机组:
[root@hkdevlogin-1 ~]# qconf -mhgrp @hiseqhosts
group_name @hiseqhosts 
hostlist hkdev-1.genomics.org.cn hkdev-2.genomics.org.cn\          //多个主机需要换行时需要加”\”
hkdev-3.genomics.org.cn
qconf –shgrpl 可以查看所有的主机组
[root@hkdevlogin-1 ~]# qconf -shgrpl            
@allhosts 
@hiseqhosts 
@prshosts
qconf –shgrp 组名 可以查看某个主机组信息
定义用户列表 dms:
[root@hkdevlogin-1 ~]# qconf -mu dms
name    dms        //用户组名称 
type    ACL DEPT 
fshare  0 
oticket 0 
entries dms             //该用户组中的用户,多个用户用逗号隔开
qconf -sul 可以查看所有的用户组
[root@hkdevlogin-1 ~]# qconf -sul            
arusers 
deadlineusers 
defaultdepartment 
dms 
prs 
test
qconf -su 用户组名 可以查看某个用户组的信息
[root@hkdevlogin-1 ~]# qconf -su prs 
name    prs 
type    ACL DEPT 
fshare  0 
oticket 0 
entries prs
注 :要使用sge,必须在每个节点上都建立同一个帐号,相同的uid和gid
查看队列中主机的情况:
qselect –q 队列名称
[root@hkdevlogin-1 ~]# qselect -q hiseq.q   
hiseq.q@hkdev-2.genomics.org.cn 
hiseq.q@hkdev-1.genomics.org.cn 
hiseq.q@hkdev-3.genomics.org.cn
3. qstat使用:
qstat –f
qstat –explain
qstat –j jobid
4. qmod使用:
qmod –cq 队列名
qmod -cj job名
5. 修改默认shell
[root@hkdevlogin-1 ~]# qconf –mconf //编辑sge的配置文件
login_shells bash,sh,ksh,csh,tcsh //把默认shell改为bash
[root@hkdevlogin-1 ~]# qconf -mq all.q //编辑队列配置文件
shell /bin/bash //把默认的shell改为bash
6. 限制单个计算节点可以使用的资源
[root@hkdevlogin-1 ~]# qconf -me hkdev-1
hostname              hkdev-1.genomics.org.cn 
load_scaling          NONE 
complex_values        slots=24,virtual_total=32G             //这个值不设置的话默认可以使用的值为无限大,任务较多的时候容易把节点跑死掉。 
user_lists            NONE 
xuser_lists           NONE 
projects              NONE 
xprojects             NONE 
usage_scaling         NONE 
report_variables      NONE
7. sge简单使用
qsub –cwd –l vf=1G –q common.q –l h=compute-0-0 test.sh
test.sh:
#!/bin/bash
#$ –S /bin/bash
sleep 100;
8. 启用-l vf参数
[root@qcs script]# qconf –mc
#name               shortcut   type        relop requestable consumable default  urgency 
#—————————————————————————————-
virtual_free        vf         MEMORY      <=    YES         YES        0        0
Posted in Linux Tagged sge
上一篇: 包政讲营销录音(3)
下一篇: Python中的特殊变量名
 51197
 50616
 41238
 38053
 32516
 29423
 28283
 23142
 23098
 21436
 1493°
 2206°
 1830°
 1759°
 2067°
 1817°
 2501°
 4200°
 4062°
 2899°