运行和验证

操作步骤

  1. 使用PuTTY工具,以root用户登录主控主机。
  2. 执行以下命令添加执行主机。

    qconf -as armnode4

  3. 执行以下命令查看默认主机组的名称。

    qconf -shgrpl
    @allhosts

  4. 执行以下命令修改主机组信息,将执行主机添加到主机组中。

    1. qconf -mhgrp @allhosts
    2. 按“i”进入编辑模式,修改以下内容。
      group_name @allhosts
      hostlist armnode4
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  5. 执行以下命令切换到非test用户。

    su - test

  6. 执行以下命令在test用户下加载SGE环境变量。

    source /path/to/SGE_ROOT/default/common/settings.sh

  7. 添加SGE环境变量到test用户的“.bashrc”中从而永久生效。

    echo "source /path/to/SGE_ROOT/default/common/settings.sh" >> /path/test/.bashrc

  8. 执行以下命令创建一个样例执行脚本“run.sh”

    vi run.sh
    按“i”进入编辑模式,添加以下内容。
    #!/bin/bash
    #$ -S /bin/bash
    nodeinfo=`hostname`
    echo "This is the SGE test from $nodeinfo" >> sge-test.log

    按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  9. 执行以下命令提交作业任务。

    qsub -V -cwd -o stdout.txt -e stderr.txt run.sh
    命令参数说明如表1所示。
    表1 qsub命令常用参数说明

    参数

    说明

    -V

    将当前shell中的环境变量输出到本次提交的任务中。

    -cwd

    在当前工作目录下运行程序。默认设置下,程序的运行目录是当前用户在其计算节点的家目录。

    -o

    将标准输出添加到指定文件尾部。默认输出文件名是$job_name.o$job_id。

    -e

    将标准错误输出添加到指定文件尾部。默认输出文件名是$job_name.e$job_id。

    -q

    指定投递的队列,若不指定,则会尝试寻找最小负荷且有权限的队列开始任务。

    -S

    指定运行run.sh中命令行的软件,默认是tcsh。推荐使用bash,设置该参数的值为/bin/bash即可,或者在run.sh文件首部添加一行#$ -S /bin/bash。若不设置为bash,则会在标准输出中给出警告信息:Warning: no access to tty (Bad file descriptor)。

    -hold_jid

    后接多个使用逗号分隔的job_id,表示只有在这些job运行完毕后,才开始运行此任务。

    -N

    设置任务名称。默认的job name为qsub的输入文件名。

    -p

    设置任务优先级。其参数值范围为 -1023~1024 ,该值越高,越优先运行。但是该参数设置为正数需要较高的权限,系统普通用户不能设置为正数。

    -j y|n

    设置是否将标准输出和标准错误输出流合并到 -o参数结果中。

    -pe

    设置并行化环境。

  10. 任务提交后的管理如表2所示。

    表2 任务提交后的常用命令参数说明

    参数

    说明

    qstat -f

    查看当前用户在当前节点提交的所有任务,任务的状态有6种情况:

    • qw,等待状态。刚提交任务的时候是该状态,一旦有计算资源了会马上运行;
    • hqw,该任务依赖于其它正在运行的job,待前面的job执行完毕后再开始运行,qsub提交任务的时候使用-hold_jid参数则会是该状态;
    • Eqw,投递任务出错;
    • r,任务正在运行;
    • s,被暂时挂起,往往是由于优先级更高的任务抢占了资源;
    • dr,节点异常退出后,删除任务就会出现这个状态,只有节点重启后,任务才会消失。

    qstat jobID

    按照任务id查看。

    qstat -u user

    按照用户查看。

    qdel jobID

    删除任务。