【问题标题】:Could SLURM trigger a script(implemented by the frontend-SLURM user) when any job is completed?当任何作业完成时,SLURM 是否可以触发脚本(由前端 SLURM 用户实现)?
【发布时间】:2017-05-04 20:46:20
【问题描述】:

我们知道 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 秒进行一次 while 检查可能效率低下。 Is doing `while ps -p $PID; do sleep 1; ` until a script is completed efficient?

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

【问题讨论】:

  • 您不能简单地调用该脚本作为提交脚本中的最后一个操作,必要时使用 SSH 连接到前端吗?
  • 我正在尝试创建一个自动化系统,当工作完成时,我想立即触发代码以允许客户访问结果。请不要客户只在外部提交他的工作(他不能对前端进行 ssh),所以集群必须在他的工作完成后让客户端现在。 @damienfrancois
  • 看过Fireworks 等工作流系统或5slurm-web 等门户](edf-hpc.github.io/slurm-web) ?他们可能会满足您的需求?
  • 我想出的最简单的解决方案是使用我想调用的脚本来操作用户的代码开始和结束会话。 @damienfrancois

标签: slurm


【解决方案1】:

一个选项是(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 开头,并使用与号 (&amp;) 使其成为后台进程。

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

【讨论】:

  • 如果这行得通,那将是巨大的帮助。那么 slurm 能够通过邮件触发/path/to/my_script.sh 吗?例如,我应该怎么做才能在程序开始时触发script_start.sh,在程序结束时触发script_end.sh?我猜邮件有START 和END 参数。 @damienfrancois
  • 当这个脚本在启动时被调用,并假设它睡眠了 1 小时。原始 slurm 脚本是等待这个称为 script(my)script) 完成还是 SLURM 将此脚本作为线程调用并且不等到它完成。 @damienfrancois
  • 我认为它不会等待它,但这就是我将如何实现它,不确定代码究竟做了什么。你的job_startup_script 会运行那么久吗?
  • 是的,它甚至可以运行更长时间:(我无法将邮件集成到 SLURM,所以我无法对其进行测试。在 conf:Default:MailProg=/bin/mail。我从终端发送的邮件也有效: echo "Your message" | mail -s "Message Subject" blabla@gmail.com.@damienfrancois
  • 是的$event应该包含CANCELLED(根据我的记忆)。如果所有变量$jobid, $eventreturn empty strings, just print the whole line echo "$@"` 进行调试。
猜你喜欢
  • 2018-01-06
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2021-08-01
相关资源
最近更新 更多