如何使用qsub复制集群系统中的环境变量?

时间:2013-10-22 04:07:15

标签: sungridengine qsub

我使用SUN的SGE将我的作业提交到集群系统。问题是如何让 计算机在主机中查找环境变量,或者如何配置qsub脚本以使计算机器在主机中加载环境变量? 以下是一个脚本示例,但它会说一些错误,例如找不到库:

    #!/bin/bash
    #
    #$ -V
    #$ -cwd
    #$ -j y
    #$ -o /home/user/jobs_log/$JOB_ID.out
    #$ -e /home/user/jobs_log/$JOB_ID.err
    #$ -S /bin/bash
    #

    echo "Starting job: $SGE_TASK_ID"

    # Modify this to use the path to matlab for your system
    /home/user/Matlab/bin/matlab -nojvm -nodisplay -r matlab_job 

    echo "Done with job: $SGE_TASK_ID"

2 个答案:

答案 0 :(得分:2)

您正在使用的技术(添加-V)应该可行。您使用-S指定shell的一种可能性是,Grid Engine配置为启动/ bin / bash作为登录shell,并且您的配置文件脚本会在您尝试传递给作业的整个环境中踩踏。

在排队/运行时尝试在作业上使用qstat -xml -j,以查看Grid Engine尝试传递给作业的环境变量。

尝试在脚本中添加env命令,以查看设置了哪些变量。

尝试在脚本中添加shopt -q login_shell;echo $?,告诉您它是否作为登录shell运行。

要列出在网格引擎中配置为登录shell的shell,请尝试:

SGE_SINGLE_LINE=true qconf -sconf|grep ^login_shells

答案 1 :(得分:1)

我认为这个问题是由于你没有在SGE的login_shells中配置BASH 通过LinkedList<YourObject> list = new LinkedList<YourObject>(); ListIterator listIt = list.listIterator(); YourObject sample = listIt.next();//or any of the objects you need in your list int valueOfSample = sample.getFirstParameter();//Assuming getFirstParameter is a method of your object class that returns the first integer parameter 检查您的login_shells,看看是否有bash。

login_shells        UNIX命令解释器,如Bourne-Shell(参见sh(1))或C-        Shell Engine可以使用Shell(请参阅csh(1))来启动作业脚本。该        命令解释器可以作为登录shell启动(即全部        系统和用户默认资源文件,如.login或.profile        在启动命令解释程序和环境时执行        对于作业将被设置为好像用户刚刚登录)或只是        用于命令执行(即只有特定于shell的资源文件,如        将执行.cshrc并设置最小的默认环境        Grid Engine - 请参阅qsub(1))。参数login_shells包含一个        逗号分隔的命令的可执行文件名列表        preters作为login-shells启动。此列表中的壳仅供参考        如果参数shell_start_mode(见上文)作为登录shell启动        设置为posix_compliant。

qconf -sconf