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

PBS集群提交多任务时如何将JobID传递给Matlab非函数脚本

解决方案

问题根源

你之前的配置存在两个核心错误:

  1. Python提交脚本中误用qsub -F参数传递变量,-F是向PBS脚本传递位置参数的选项,不会自动生成环境变量,导致PBS脚本中无法读取${JOBID}
  2. Python原代码存在语法错误,for循环末尾缺少冒号

步骤1:修改Python提交脚本

修正后的代码如下:

#!/bin/env python
import csv, subprocess
for i in range(1,3):
    # 使用qsub的-v参数传递环境变量,直接向PBS作业注入JOBID变量
    qsub_cmd = """qsub -v JOBID={jobid} submit_m3.pbs""".format(jobid=i)
    print(qsub_cmd)
    exit_code = subprocess.call(qsub_cmd, shell=True)

步骤2:修改PBS执行脚本

修正后的代码如下:

#!/bin/bash
#PBS -l nodes=1:ppn=8
#PBS -l walltime=48:00:00
#PBS -l pmem=10gb
#PBS -A open
# 加载依赖
module purge
module load matlab
cd ~/code
# 双引号会自动展开bash中的JOBID变量,同时日志名增加JOBID避免多任务覆盖
matlab -nodisplay -nosplash -nodesktop -r "job_id=${JOBID};run('myScript.m');exit;" > log.myLog.${JOBID} 2>&1

步骤3:验证Matlab变量接收

在你的myScript.m文件最开头加入以下代码,任务完成后查看对应编号的日志文件,确认变量传递成功:

disp(['成功接收JOBID: ', num2str(job_id)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:24:00