如何按序运行slurm作业脚本 每次传入其他文件中的不同变量给R脚本
实现方案
步骤1:修改R脚本使其支持接收命令行参数
原有script.R无法接收外部传入的参数,需要添加参数读取逻辑,修改后内容如下:
# 读取命令行传入的位置参数,trailingOnly=TRUE表示忽略R本身的启动参数 args <- commandArgs(trailingOnly = TRUE) x <- args[1] print(x)
步骤2:修改Slurm作业脚本支持参数透传+避免输出覆盖
原有job.sh所有作业的输出、错误日志、作业名都相同,会导致文件覆盖,同时需要把接收的参数传递给R脚本,修改后内容如下:
#!/bin/bash #SBATCH --job-name test_${1} #SBATCH --ntasks 8 #SBATCH --time 04:00 #SBATCH --output out_${1} #SBATCH --error err_${1} # 将作业脚本接收的第一个参数传递给R脚本 Rscript script.R ${1}
这里${1}是Shell脚本的内置变量,代表调用该脚本时传入的第一个位置参数。
步骤3:批量提交作业
直接在HPC登录节点执行以下单行循环命令,就会按var.txt的顺序依次提交4个作业,每个作业对应一个变量:
while read -r var; do sbatch job.sh "$var"; done < var.txt
可选优化
如果var.txt末尾存在空行,不想提交无效作业,可以加非空判断:
while read -r var && [ -n "$var" ]; do sbatch job.sh "$var"; done < var.txt
内容的提问来源于stack exchange,提问作者2801001
相关产品推荐
相关产品推荐

