You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SGE环境下通过bash脚本参数设置qsub提交作业的自定义名称

问题原因

SGE 中以#$为前缀的作业配置指令,是由qsub命令在提交作业阶段直接读取解析的,执行顺序早于 Bash 对脚本内部变量的解析,因此你写在脚本中的#$ -N $1里的$1不会被替换为传入的参数,会被直接当做作业名写入队列。


解决方案

方法1:提交时通过qsub参数直接指定作业名

删除原提交脚本send_to_sge.sh中#$ -N $1这一行,提交作业时直接通过-N参数传入作业名:

qsub -N foo send_to_sge.sh foo

如果不想每次重复输入文件名,可以额外封装一层通用提交脚本,比如命名为generic_sge_submit.sh:

#!/bin/bash
# 通用SGE提交脚本用法:./generic_sge_submit.sh <待运行的Python文件名>
if [ $# -lt 1 ];then
    echo "缺少参数:请指定要运行的Python文件路径"
    exit 1
fi
# 自动取文件名作为作业名,兼容带路径的输入比如./src/bar.py
job_name=$(basename "$1")
qsub -N "$job_name" send_to_sge.sh "$1"

调整后的send_to_sge.sh内容如下:

#!/bin/bash
#$ -cwd
#$ -S /bin/bash
python -u "$1" >/output_dir/"$1".out 2>/error_dir/"$1".error

方法2:通过Here Document动态生成提交脚本

不用单独维护静态的提交脚本,直接在通用提交脚本中动态生成带正确作业名的提交内容,使用更便捷:

#!/bin/bash
# 通用SGE提交脚本用法:./sge_submit.sh <待运行的Python文件名>
if [ $# -lt 1 ];then
    echo "缺少参数:请指定要运行的Python文件路径"
    exit 1
fi
job_file="$1"
job_name=$(basename "$job_file")

# 动态生成提交内容传给qsub,变量会在提交前完成替换
qsub << EOF
#!/bin/bash
#$ -cwd
#$ -S /bin/bash
#$ -N ${job_name}
python -u ${job_file} >/output_dir/${job_name}.out 2>/error_dir/${job_name}.error
EOF

使用时直接执行./sge_submit.sh foo即可,作业名会自动设为foo,输出和错误日志也会对应生成。


内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:54:02