如何使用 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"

您正在使用的技术(添加 -V)应该有效。 由于您使用 -S 指定 shell,因此的一种可能性是网格引擎配置为启动/bin/bash 作为登录 shell,并且您的配置文件脚本在您尝试传递给作业的环境中到处都是。

尝试在作业排队

/运行时对作业使用 qstat -xml -j,以查看网格引擎尝试传递给作业的环境变量。

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

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

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

SGE_SINGLE_LINE=true qconf -sconf|grep ^login_shells

我认为这个问题是由于您没有在 SGE login_shells中配置 BASH。通过qconf -sconf检查您的login_shells,看看是否在那里。

login_shells UNIX 命令解释器,如 Bourne-Shell(参见 sh(1))或 C- Shell (参见 csh(1)) 可以被网格引擎用来启动作业脚本。这 命令解释器可以作为登录外壳启动(即 都 系统和用户默认资源文件(如 .login 或 .profile)将是 在命令解释器启动和环境时执行 对于作业将设置为用户刚刚登录)或只是 用于命令执行(即仅 shell 特定的资源文件,如 将执行.cshrc,并设置一个最小的默认环境 网格引擎 - 参见 qsub(1))。 参数login_shells包含一个 命令的可执行名称的逗号分隔列表 要作为登录 shell 启动的预处理器。 此列表中的外壳仅是 如果参数shell_start_mode,则作为登录 shell 启动(见上文) 设置为posix_compliant。

   Changes to login_shells will take immediate effect.   The  default  for
   login_shells is sh,csh,tcsh,ksh.
   This value is a global configuration parameter only. It cannot be over-
   written by the execution host local configuration.

最新更新