在 HPC 集群上的 bash 脚本中加载模块

在 HPC 集群上的 bash 脚本中加载模块

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。)

相关内容