2

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

    #!/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"
4

2 回答 2

2

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

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

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

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

要列出在 Grid Engine 中配置为登录 shell 的 shell,请尝试:

SGE_SINGLE_LINE=true qconf -sconf|grep ^login_shells
于 2013-10-24T14:14:01.343 回答
1

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

login_shells Grid Engine 可以使用 Bourne-Shell(请参阅 sh(1))或 C-Shell(请参阅 csh(1))等 UNIX 命令解释器来启动作业脚本。命令解释器可以作为登录 shell 启动(即所有系统和用户默认资源文件,如 .login 或 .profile 将在命令解释器启动时执行,并且将设置作业环境,就好像用户已经刚刚登录)或仅用于命令执行(即仅执行特定于 shell 的资源文件,如 .cshrc,并且 Grid Engine 设置了最小的默认环境 - 请参阅 qsub(1))。参数 login_shells 包含一个逗号分隔的命令解释器的可执行名称列表,这些命令解释器将作为 login-shells 启动。

   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.
于 2016-12-07T10:14:17.537 回答