我使用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"
答案 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