slurm - 当任何作业完成时,SLURM 能否触发脚本(由前端 SLURM 用户实现)?

标签 slurm

据我们所知,SLURM 可以在作业完成时发送电子邮件。

除此之外,类似于作业完成时的邮件机制:

[问] SLURM 是否可以在任何作业完成时触发脚本(由前端 SLURM 用户实现)?

示例解决方案:这将迫使我使用 while() 来检查并等待提交的作业是否完成。这可能会消耗额外的 CPU 使用率。

jobID=$(sbatch -U user -N1 run.sh | cut -d " " -f4-);
job_state=$(sacct -j $jobID --format=state  | tail -n1 | head -n1)
while [ $job_state != $completed ]
do
    job_state=$(sacct -j $jobID --format=state  | tail -n1 | head -n1)
done
my_script.sh//When any job completed I want SLURM to trigger my_script.sh if possible.

请注意:有人告诉我,每 1 秒检查一次可能效率低下。 Is doing `while ps -p $PID; do sleep 1; ` until a script is completed efficient?

感谢您宝贵的时间和帮助。

最佳答案

一个选项是(ab)使用 slurm.conf 中的 MailProg 选项。它最初是用于在作业完成后向用户发送电子邮件的程序的完全限定路径。但是那个程序可以做任何其他事情。它通过命令行参数接收作业 ID 和一些其他信息。

因此您可以使用 MailProg=/path/to/my_script.sh 配置 slurm。并且您需要确保客户端添加了 --mail-type 选项,或者它是通过作业提交插件自动添加的。

脚本可能具有以下结构(未经测试):

#!/bin/bash

# First to the wanted behaviour
jobid=$(echo $2 | cut -d= -f2 | cut -d' ' -f 1|cut -d_ -f1)
event=$(echo $2 | awk 'print $4')

case $event in
Started)
    job_startup_script $jobid 
    ;; 
Ended|Failed|TIMEOUT)
    job_end_script $jobid
    ;; 
esac

# Then send the email to get the usual behaviour
/bin/mail "$@"

脚本将从 Slurm 接收的参数如下所示:

SLURM Job_id=<Job-ID> Name=<JobName> <Status>, Run time <RunTime>

如果脚本 job_startup_script 很长,请使用 nohup 启动它并使用符号 (&) 使其成为后台进程。

还要确保所有脚本都可以被 SlurmUser 读取和执行

关于slurm - 当任何作业完成时,SLURM 能否触发脚本(由前端 SLURM 用户实现)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449165/

相关文章:

r - Slurm群集中的R代码无法正确读取

state - SLURM 的 sinfo 显示混合状态而不是分配状态

cluster-computing - Slurm:最大 SLURM_ARRAY_TASK_ID 的变量

ubuntu - SLURM 不遵循请求的资源

configure - 为什么不能打开 MPI 配置找到 pmi2.h 库?

python - 在 SLURM 中运行程序时如何保存打印语句?

slurm - Snakemake slurm 输出文件重定向到新目录

python - 开发可在不同环境中运行的Python软件

wolfram-mathematica - 使用 Slurm 提交 .m 批处理作业后,我可以在不更改原始提交的情况下编辑我的 .m 文件吗?

hpc - Slurm:为什么在sbatch中使用srun?