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

如何让长期运行的Slurm作业在文件更新时触发独立Slurm作业?

实现方案

完全可以通过Slurm实现这个需求,核心思路是在同一个Slurm作业中后台运行程序A,同时用文件系统监控工具触发程序B的Slurm作业提交。以下是具体步骤和脚本示例:

1. 编写主作业脚本(同时运行程序A和监控逻辑)

创建一个Slurm作业脚本run_A_with_monitor.sh,内容如下:

#!/bin/bash
#SBATCH --job-name=A_monitor
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --time=7-00:00:00  # 根据集群规则设置足够长的运行时长,或用--time=infinite(若集群允许)

# 后台启动长期运行的程序A
/path/to/your/program_A &
A_PID=$!

# 定义需要监控的目标文件
TARGET_FILE="/path/to/your/output/file.txt"

# 循环监控文件修改事件,触发程序B的作业提交
while inotifywait -e modify "$TARGET_FILE"; do
    # 提交程序B的Slurm作业,替换为你的程序B提交脚本路径
    sbatch /path/to/your/submit_B.sh
done

# 等待程序A进程结束(可选,若程序A会自然退出则保留)
wait $A_PID

2. 编写程序B的Slurm提交脚本

创建submit_B.sh,用于单独提交程序B的作业:

#!/bin/bash
#SBATCH --job-name=program_B
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --time=01:00:00  # 根据程序B的实际运行时长调整

# 执行程序B
/path/to/your/program_B

关键注意事项

  • 依赖检查:确保集群节点安装了inotify-tools(包含inotifywait工具),若未安装可联系集群管理员部署,或自行编译安装到个人目录。
  • 避免重复触发:如果程序A的单次写入会触发多次modify事件,可在监控循环中添加延迟(如sleep 2)或记录上次提交时间,防止短时间内重复提交程序B的作业。
  • 作业时长设置:程序A为长期运行,需确保主作业的--time参数足够覆盖其运行周期;若集群不允许无限时长,可添加逻辑在程序A未退出时自动重新提交主作业。
  • 资源分配:主作业的资源配置需同时满足程序A和监控脚本的需求,避免资源耗尽导致程序异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:52:42