qsub命令
用户通过qsub命令来向系统提交任务,有两种方式提交:脚本方式和命令行方式。(一般情况下,不允许root用户使用qsub命令提交作业)。下面先讲一下用这两种方式提交作业的过程。
脚本方式提交
用户将需要执行的程序或命令写入脚本中,再加入一些必要或者可选的语句,就可以通脚本方式提交。脚本提交比较方便,用户可以用最简单的文字编辑器(例如 vi)编写一个脚本,然后使用 qsub 命令提交该脚本,pbs 会按照脚本内容执行相应的任务。脚本提交的不足之处就是需要用户执行任务前编写脚本。
脚本方式提交任务的一般格式为:qsub [script_name],script_name 是任务脚本的名称。
下面介绍 pbs 任务脚本的编写方法。
pbs 任务脚本包括三部分:
* shell 说明语句:用来说明用户使用的是哪种 shell,例如 #!/bin/sh说明用户需要使用 Bourne shell,如果用户没有指定,则默认为 Bourne shell
* pbs 指示语句:pbs 指示语句是用户用来请求任务运行时所需的资源或设置任务的一些属性的。以#PBS开头,如#PBS –N taskname 是用来设置任务名称的。pbs 指示语句是可选的,用户可以不用关心它如何写,系统会自动设置。
* pbs 指示句的一个主要作用是请求任务执行时所需要的系统资源,如 cpu 数目,存储容量,运行时间,运行优先级等等。以脚本方式提交的任务的资源请求是通过 pbs 指示语句,一般格式为 #PBS –l [选项=] [选项对应的值],如#PBS –l ncpus=5 表示请求 5 个cpu为之服务。系统资源如下所示
arch 所需要的系统结构,只用在资源块中 -l arch=linux
cput 任务的所有进程拥有的最大 cpu 执行时间 -l cput=1:00:00
file 任务能够创建的文件的大小 -l file=45mb
host 指定执行主机的名称 -l nodes=X:host 分配 X个主机名称 中含有 host的执行节点
mem 任务的所有进程能够分配到的最大物理内存数 -l mem=100mb
ncpus 请求的 cpu数 -l ncup=5
nice 任务运行时的 nice 优先级值 -l nice=3
pcput 任务的任何一个进程拥有的最大 cpu 执行时间 -l pcput=1:00:00
pmem 任务的任何一个进程能够分配到的最大物理内存数 -l pmem=45mb
pvmem 任务的任何一个进程能够使用的虚拟内存的最大数 -l pvmem=100mb
vmem 任务的所有并发进程能够使用的最大虚存数 -l pvmem=100mb
walltime 任务可以处于运行态的最大 wall-clock 时间 -l walltime=1:00:00
custom resources 用户自定义资源
最常用的几种资源是:walltime, ncpus, mem, host。其它可以不用太关心。
资源请求的两种方式:
a、资源块方式:资源块是将任务所需的资源作为一个整体,这个整体中说明了所需要的各种资源的数目。其格式为:-l select=[N:]chunk[+[N:]chunk…],如qsub –l select=2:ncpus=3:mem=4gb:arch=linux ,select=2表示需要2个这样的资源块,一个资源块包括3个cpu,4gb的内存,系统结构要求是linux,即总共需要6个cpu,8gb的内存。再如:-l select=2:ncpus=1:mem=10GB+3:ncpus=2:mem=8GB:arch=solaris注意中间的+号,是两个资源块的分隔符
b、请求全任务(job-wide)资源:格式为 –l keyword=value[,keyword=value ...]如:qsub -l ncpus=4,mem=123mb,arch=linux
任务(程序或命令):可以是用户程序(如C程序),也可以是系统命令
下面是一个完整的任务脚本例子,脚本名为 mytask:
1. #!/bin/sh //指明所用的 shell
2. #PBS –N mytask //设置任务名称
3. #PBS -l walltime=1:00:00 //请求任务执行时间
4. #PBS -l select=ncpus=4:mem=400mb //请求任务执行所需资源
5. #PBS -j oe //设置相关属性(文件合并)
6. date /t //系统命令(打印日期时间)
7. .\my_application //所要执行的任务(当前目录名为 my_application的任务)
8. date /t // 系统命令
第 1 行说明所用的 shell;第 2 至5 行是 pbs 指示语句,设置了任务的一些属性,并请求了资源;第 6 至8行是要执行的命令及任务。
编写完脚本后,使用 qsub 命令提交脚本,在 shell下输入:
qsub mytask
后敲回车。
系统会输出一个任务标识符:sequence-number.servername,如 220.cnode01。sequence-number是任务编号,后面需要用这个号查看任务的执行状态,ervername
是 pbs server的名称。
命令行方式提交
命令行方式提交不用写脚本,用户可以直接从命令行输入。输入的内容基本上和在脚本中输入的相同。其基本格式如下:
qsub <return> //输入qsub命令后回车
[directives] //pbs指示语句(以#PBS为前缀)
[tasks] //任务或命令
ctrl-D //结束输入,提交任务
对于上面用脚本方式提交的任务,用命令行方式提交的格式如下:
1. qsub
2. #PBS –N mytask
3. #PBS –l walltime=1:00:00
4. #PBS –l select=ncpus=4:mem=400mb
5. #PBS -j oe
6. date /t
7. ./my_application
8. date /t
注:以命令行方式提交任务时,这些命令选项都要以 pbs 指示语句的格式给出,即选项之前要加前缀#PBS。
任务提交后,用户如果要知道任务的当前运行状态,可以通过 qstat 命令查询。qstat 命令的常用选项有:
无选项:当 qstat 命令不带任何选项时,以默认方式显示任务信息,例如
[soofree@node32]$ qstat
Job id Name User Time Use S Queue
—————- —————- —————- ———— ——
569.node32 test soofree 0 R small
其中,Job id 是任务的标识符,Name 是任务名称,User是任务所有者,Time Use 是CPU使用时间,S 是任务当前状态(本例中 R表示正在运行),Queue表示任务所在队列。任务的状态如下:
* B 只用于任务向量,表示任务向量已经开始执行
* E 任务在运行后退出
* H 任务被服务器或用户或者管理员阻塞
* Q 任务正在排队中,等待被调度运行
* R 任务正在运行
* S 任务被服务器挂起,由于一个更高优先级的任务需要当前任务的资源
* T 任务被转移到其它执行节点了
* U 由于服务器繁忙,任务被挂起
* W 任务在等待它所请求的执行时间的到来(qsub -a)
* X 只用于子任务,表示子任务完成
再举一例,使用-a 选项指定任务开始执行时间:
[soofree@nod32]$ qsub -a 2102 test
571.node32
[soofree@node32]$ qstat
Job id Name User Time Use S Queue
—————- —————- —————- ———– — ——–
570.cnode01 test soofree 0 W default
此时任务状态(S)显示 W,表示任务正在等待执行时间的到来
posted on 2012-05-29 22:50 pptwapaopa 阅读(26859) 评论(0) 编辑 收藏 举报