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



众所周知,SLURM可以在作业完成后发送电子邮件。

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

[Q] 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 秒检查一次可能效率低下。正在做"而 ps -p $PID;睡觉 1;'直到脚本高效完成?

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

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

因此,您可以使用MailProg=/path/to/my_script.sh.您需要确保客户端添加--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

最新更新