Python通过os.system提交SLURM脚本时出现sh: logger: command not found错误
问题解决办法
核心原因
os.system() 默认调用的是非登录、非交互式的 sh 环境,不会加载用户的 .bashrc/.profile 等配置文件,导致终端里正常的环境变量(比如包含 logger、SLURM工具的 PATH)在这个环境中缺失。而直接在终端执行 sbatch 时,用的是交互式登录shell,所有环境配置都已加载,所以没有问题。
具体解决方案
1. 让shell加载完整登录环境执行sbatch
把Python里的提交命令改成调用登录模式的bash,强制加载所有环境配置:
os.system('bash -lc "/usr/local/slurm/bin/sbatch ' + fname + '"')
-lc 参数让bash以登录模式运行,会自动加载你的环境配置文件,补上缺失的 PATH 和其他SLURM相关变量,避免后续复杂任务出现环境缺失问题。
2. 手动设置完整的PATH环境变量
在Python脚本开头,直接把需要的路径添加到环境变量里(先在终端执行 echo $PATH,复制完整的PATH内容,或者只补充缺失的部分):
import os # 补充logger和slurm的路径,比如logger通常在/usr/bin os.environ['PATH'] = '/usr/bin:/usr/local/slurm/bin:' + os.environ['PATH'] # 之后再用sbatch命令 os.system('/usr/local/slurm/bin/sbatch ' + fname)
3. 检查SLURM作业脚本的环境配置
确保你的SLURM作业脚本(即fname对应的文件)开头的shebang用bash而非sh:
#!/bin/bash
如果作业脚本需要特定环境(比如conda、模块),可以在脚本开头手动source对应的配置文件,比如:
source ~/.bashrc module load slurm
内容的提问来源于stack exchange,提问作者user1237300
相关产品推荐
相关产品推荐

