zoukankan      html  css  js  c++  java
  • 集群作业管理OpenPBS与OpenPBS Interface Library

    OpenPBS安装

    1、 必须用root登录

    2、 创建安装路径,一般是:/usr/local/OpenPBS

    3、 cp OpenPBS安装包到安装路径并释放

    4、 进入释放的目录,例如:$>OpenPBS_2_3_16"

    5、 运行OpenPBS配置脚本:

    $>./configure –prefix=/usr/local/OpenPBS

    ./configure可以配置OpenPBS的环境,-prefix是一些安装目录的前缀,例如lib等,默认是/usr/local。可以./configure –help查看所有的参数。一般默认的就可以。

    6、 编译OpenPBS:在释放的目录下make.

    make的过程中可能出现如下错误:

    make[4]: *** No rule to make target `'''', needed by `attr_atomic.o''''. Stop.

    make[4]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib/Libattr''''

    make[3]: *** [all] Error 2

    make[3]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib/Libattr''''

    make[2]: *** [all] Error 2

    make[2]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib''''

    make[1]: *** [all] Error 2

    make[1]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src''''

    make: *** [all] Error 2

    这需要一个补丁来解决,参见附录

    7、 安装OpenPBS:编译成功后,make install

    8、 创建节点(node)文件

    /usr/spool/PBS/server_priv/nodes

    文件内容是节点的机器名。例如

    node1

    node2

    ……

    当然可以有更具体的设置. 包括机群系统中所有结点的描述,如主机名,属性和cpu的数目。结点文件的格式为:hostname [:ts] [property…] [npNUMBER]

    9、 建立MOM进程配置文件

    {PBS_HOME}/mom_priv目录下建立资源管理器守护进程的配置文件config。所谓{PBS_HOME}可以在安装的第一步./configure的时候指定,相关参数:

    --set-server-home={YOUR_PBS_HOME},一般不用指定,用默认值就好了。默认值为/usr/spool/PBS

    config文件的内容通常包括:

     $logevent 0x1ff

     $clienthost server_host

    其中$logevent是为了设置记录作业执行事件日志的掩码,当其值设为0x1ff时,表示记录作业运行事件的所有日志信息;server_hostPBS服务器所在的主机名。

    OpenPBS启动

    1.         启动MOM进程

    $> /usr/local/OpenPBS/sbin/pbs_mom

    2.      启动OpenPBS服务器

    $>/usr/local/OpenPBS/sbin/pbs_server –t create

    (第一次启动用户服务器时,需要“–t create”选项,以后启动不需要)

    3.        启动调度器

    $>/usr/local/OpenPBS/sbin/pbs_sched

    (建议在$HOME/.bash_profile中加入

    OPENPBSDIR=/usr/local/OpenPBS

    PATH=$PATH:$OPENPBSDIR/bin: $OPENPBSDIR/sbin

    export OPENPBSDIR PATH

    创建队列

    qmgr创建队列,例如:

    #创建队列,并命名为normal

    qmgr -c "c q normal"

    #设定队列的类型为Execution

    qmgr -c "s q normal queue_type=Execution"

    #设定该队列中任务最大运行时间为24小时(CPU时间)

    qmgr -c "s q normal resources_max.cput=24:00:00"

    #设定该队列中任务最小运行时间为1(CPU时间)

    qmgr -c "s q normal resources_min.cput=1"

    #设定该队列中任务默认运行时间为12分钟(CPU时间)

    qmgr -c "s q normal resources_default.cput=12:00"

    #enable queue

    qmgr -c "s q normal enabled=true"

    #start queue

    qmgr -c "s q normal started=true"

    #normal队列设定为默认队列

    qmgr -c "s s default_queue=normal"

    qmgr的参数中-c代表命令行,引号(“”)中的内容是要执行的命令。

    其中ccreate, sset, qqueue,所以,上述命令可以写作:

    qmgr –c “set queue normal enabled=true”

    ……

    提交任务可以用qsub,只有非root用户才可以提交任务。

    OpenPBS Interface Library

           OpenPBS Interface Library(IFL)OpenPBS提供的一组函数,完成OpenPBS的任务。

    例如:pbs_connect,是连接服务器的函数。

           编写程序调用这些函数需要以下两个头文件:

           #include

    #include

    和一个静态链接库:libpbs.a(可以在/usr/local/lib/中找到这个库)

    因为该库用C编写需要,如果用C++编写程序调用这些函数,则需要:

    extern “C”

    下面是一个示例程序(subjob.cc),作用就是提交任务,如果成功返回该任务提交后在服务器上的任务标示,如果失败则返回错误代码:

    extern "C"//C 函数

    {

    #include

    #include

    }

    #include

    int main(int argc,char** argv)

    {

            int Con=pbs_connect("server”); //连结服务器”server”

            printf("Con=%d"n",Con);

            char *Ret=pbs_submit(Con,0,argv[1],0,0);//提交任务

            if (!Ret)

            {

    printf("ERR=%d"n",pbs_errno);//发生错误,打印错误代码

            }

            else

            {

                    printf("Ret=%s"n",Ret);//打印返回的任务标识

            }

            delete Ret;

            return 1;

    }

    编译该程序:

    $>g++ -o subjob subjob.cc –lpbs

    附录

    安装OpenPBS过程中make出错

    如果遇到前文提到的错误,那么通过打补丁可以解决该问题。

    该补丁可以通过以下方法得到:

    1.       下载:http://www.webmo.net/support/patch/pbs.patch

    2.       将下面内容(=包括中的内容,不包含=)存入pbs.patch(当然,任意文件名)

    ======================================================================

    --- /buildutils/makedepend-sh.000 Wed Nov 17 11:32:52 1999

    +++ /buildutils/makedepend-sh    Thu Jul 10 13:35:43 2003

    @@ -574,6 +574,12 @@

                     test "$verbose" -lt 2 && errout=''''2> /dev/null''''

        

                     eval $CPP $arg_cc $d/$s $errout | "

    +                  sed "

    +                       -e ''''1d'''' "

    +                       -e ''''/^#.*/d'''' "

    +                       -e ''''/^#.*/d'''' "

    +                       -e ''''/^#.*/d'''' "

    +                       -e ''''/^#.*/d'''' | "

                       sed -n -e "s;^"# [0-9][0-9 ]*"""(.*")"";$f: "1;p" | "

                       grep -v "$s"$" | "

                       sed -e ''''s;"([^ :]*: [^ ]*").*;"1;'''' "

    --- /src/lib/Liblog/pbs_log.c.000 Tue Dec 4 18:38:40 2001

    +++ /src/lib/Liblog/pbs_log.c    Thu Jul 10 13:39:45 2003

    @@ -109,6 +109,7 @@

     

     /* Global Data */

     

    +#include

     extern int errno;

     char log_buffer[LOG_BUF_SIZE];

     char log_directory[_POSIX_PATH_MAX/2];

    --- /src/server/svr_connect.c.000 Tue Dec 4 18:39:23 2001

    +++ /src/server/svr_connect.c    Thu Jul 10 13:43:11 2003

    @@ -113,6 +113,7 @@

     

     struct connect_handle connection[PBS_NET_MAX_CONNECTIONS]; /* used by API */

     

    +#include

     extern int     errno;

     

     extern int     pbs_errno;

    将该文件cpOpenPBS安装包的释放目录,打补丁:

    $>patch -pl -b < pbs.patch

    然后就可以正常安装了

    使用IFL发生编译错误

    Q:提示找不到库libpbs.a

    A:确定正确安装OpenPBS,lib搜索路径中包含libpbs.a.确定编译选项是-lpbs

    Q:提示找不到函数,例如

    undefined reference to `pbs_connect(char*)''''

    A:在程序中这样包含头文件:

    extern "C"               

    {

    #include

    #include

    }

    ……

    Q:已经像上面那样包含头文件,仍然找不到函数,不过这次看起来有点不一样,例如:

           undefined reference to `pbs_connect''''

    A:编译的时候,要将libpbs.a的引用放在源文件后面,例如:

    $>g++ -o subjob subjob.cc –lpbs

  • 相关阅读:
    Split Temporary Variable
    Introduce Explaining Variable
    Replace Temp with Query
    Extract Method
    自测代码的价值
    代码的坏味道
    Divergent Change & Shotgun Surgery
    Large Class
    Long Method
    Duplicated Code
  • 原文地址:https://www.cnblogs.com/cy163/p/1184167.html
Copyright © 2011-2022 走看看