通过walltime杀死之前的批处理作业

use*_*145 4 batch-processing slurm

我正在使用SLURM运行批处理作业.我在作业文件中开始的过程是迭代的.在每次迭代之后,可以通过创建名为stop的文件轻轻地杀死程序.我希望这个停止命令能够在工作被限制前一小时自动发出.

dam*_*ois 9

在--signal选项发生时间限制之前,您可以让Slurm向您的作业发出可配置的时间信号

从sbatch手册页:

--signal = [B:] [@]当作业在结束时间的sig_time秒内时,向其发送信号sig_num.由于SLURM处理事件的分辨率,信号可能比指定的时间提前60秒发送.sig_num可以是信号编号或名称(例如"10"或"USR1").sig_time必须具有0到65535之间的整数值.默认情况下,在作业结束时间之前不会发送任何信号.如果指定了sig_num而没有任何sig_time,则默认时间将为60秒.使用"B:"选项仅发出批处理shell信号,不会发出任何其他进程的信号.默认情况下,将发出所有作业步骤的信号,但不会发出批处理shell本身的信号.

如果您可以修改程序以捕获该信号而不是查找文件,那么这是最佳选择.

如果你不能,添加类似的东西

trap  "touch ./stop"  SIGUSR1
Run Code Online (Sandbox Code Playgroud)

在您的提交脚本中.有了--signal=B:SIGUSR1@3600这将使脚本捕捉SIGUSR1信号并创建stop分配结束前文件一小时.

请注意,只有最新版本的Slurm可以B:选择--signal.如果您的版本没有它,您将需要设置看门狗.见这里的例子.