qsub
我在标准大学集群上提交了以下 bash 脚本,
#!/bin/bash
#$ -cwd # Set the working directory for the job to the current directory
#$ -pe smp 1 # Request 1 core
#$ -l h_rt=1:0:0 # Request 1 hour runtime
#$ -l h_vmem=100M # Request 1GB RAM
module load xorg-utils/X11R7.7
module load mathematica/13.1.0
math < topaz43 > topaz43master
但脚本在排队一段时间后返回错误,并jade4.e374195
显示
/var/opt/sge/node-b00a-001/job_scripts/374195: line 6: module: command not found
/var/opt/sge/node-b00a-001/job_scripts/374195: line 7: module: command not found
/var/opt/sge/node-b00a-001/job_scripts/374195: line 8: math: command not found
当我在登录节点上运行模块时,这些模块通常会正确加载,运行
module load xorg-utils/X11R7.7
module load mathematica/13.1.0
math
将照常启动 Mathematica。发生了什么事?
答案1
这些命令很可能被定义为 shell 函数(或别名)——这样它们就能够更新 shell 的环境($PATH 和其他内容),而放置在 /bin 中的外部脚本则无法做到这一点。
只有交互式 shell 会自动从 /etc/profile 和 /etc/bash.bashrc 加载此类定义;非交互式 Bash 进程(运行脚本的进程)不会这样做。您必须使用 等显式地获取初始化脚本. /etc/profile
。
(如果“模块”是别名而不是函数,则还需要使用 在非交互模式下启用别名扩展shopt -s expand_aliases
。)