如何在 ssh 命令行中使用环境模块?

How to use environment modules in a ssh command line?

Environment Modules 包用于动态修改用户环境(debian 包 environment-modules)。

我想直接从 ssh 命令行使用 module。目的是能够从在前端节点上执行的 bash 脚本在不同节点上执行命令。我不想为每个不同的节点配置显式更新 PATHLD_LIBRARY_PATH 环境变量。

当我直接连接到节点,然后从节点调用module时,显然是有效的:

jyvet> ssh mynode
jyvet@mynode> module load gcc-6.0
jyvet@mynode> gcc --version
gcc (GCC) 6.0.1

但是下面的方法失败了:

jyvet> ssh mynode "module load gcc-6.0; gcc --version"
command not found: module
gcc-4.8 (Debian 4.8.4-1) 4.8.4

module/etc/profile.d/modules.sh 初始化,由 /etc/profile 调用(它在 shell 启动时设置环境变量)。

ssh 命令执行 shell 是一个 非交互式 shell,既不调用 /etc/profile,也不读取配置文件。

解决方法如下:

jyvet> ssh mynode "source /etc/profile; module load gcc-6.0; gcc --version"
gcc (GCC) 6.0.1

您还可以调用 bash 的登录实例,以便 /etc/profile.d/modules.sh 在登录时自动 source-ed:

ssh mynode "bash -lc 'module load gcc-6.0; gcc --version'"