gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:14:16 25 4
gpt4 key购买 nike

据我们所知,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com