运行 Slurm 抢占暂停事件脚本
Running a script on Slurm Preemption Suspend Event
我打算使用具有不同优先级的不同队列,较高优先级队列中的作业应该挂起较低优先级队列中的作业。这种机制工作正常,除了我想捕捉暂停事件和 运行 一些脚本来发布软件许可证。
我还没有找到任何内置机制来执行此操作。我研究了捕获发送到进程的系统信号。它在手册中说 SIGSTOP 和 SIGCONT 用于挂起和恢复进程。然而,不可能捕捉到这些信号。
我制作了一个虚拟 python 脚本来观察它是如何工作的,如果你在批处理脚本中使用 s运行 ,看起来 slurm 在 SIGSTOP 之前发送 SIGSTP 否则我无法捕捉到任何信号。
这是我分别使用的 python 和 sbatch 脚本:
#!/usr/bin/env python3
import time
import signal
import os
if __name__ == "__main__":
def signal_handler_suspend(*args):
print("Suspended")
def signal_handler_resume(*args):
print("Continued")
signal.signal(signal.SIGTSTP, signal_handler_suspend)
signal.signal(signal.SIGCONT, signal_handler_resume)
print(os.getpid())
i=0
while i<100:
time.sleep(1)
i+=1
print(i)
Bash 与 sbatch 一起提交的脚本
#!/bin/bash
./signal_trial
所以问题是:
- 有没有更好的方法在不尝试捕获系统信号的情况下执行此操作?
- 为什么当我使用 s运行 而没有 s运行 时它不会在 SIGSTOP(不可捕获)之前发送 SIGTSTP(可捕获)?
我发现当您使用 ProctrackType=proctrack/cgroup
时,slurm 使用 freezer 来暂停进程。
实际上不可能通过设计捕捉到任何信号。
所以使用 ProctrackType=proctrack/linuxproc
就可以了。现在我可以在发送 SIGSTOP 之前捕获 SIGTSTP。
如果您必须使用 cgroups 进行进程跟踪,这当然不是完美的解决方案。
我打算使用具有不同优先级的不同队列,较高优先级队列中的作业应该挂起较低优先级队列中的作业。这种机制工作正常,除了我想捕捉暂停事件和 运行 一些脚本来发布软件许可证。
我还没有找到任何内置机制来执行此操作。我研究了捕获发送到进程的系统信号。它在手册中说 SIGSTOP 和 SIGCONT 用于挂起和恢复进程。然而,不可能捕捉到这些信号。
我制作了一个虚拟 python 脚本来观察它是如何工作的,如果你在批处理脚本中使用 s运行 ,看起来 slurm 在 SIGSTOP 之前发送 SIGSTP 否则我无法捕捉到任何信号。
这是我分别使用的 python 和 sbatch 脚本:
#!/usr/bin/env python3
import time
import signal
import os
if __name__ == "__main__":
def signal_handler_suspend(*args):
print("Suspended")
def signal_handler_resume(*args):
print("Continued")
signal.signal(signal.SIGTSTP, signal_handler_suspend)
signal.signal(signal.SIGCONT, signal_handler_resume)
print(os.getpid())
i=0
while i<100:
time.sleep(1)
i+=1
print(i)
Bash 与 sbatch 一起提交的脚本
#!/bin/bash
./signal_trial
所以问题是:
- 有没有更好的方法在不尝试捕获系统信号的情况下执行此操作?
- 为什么当我使用 s运行 而没有 s运行 时它不会在 SIGSTOP(不可捕获)之前发送 SIGTSTP(可捕获)?
我发现当您使用 ProctrackType=proctrack/cgroup
时,slurm 使用 freezer 来暂停进程。
实际上不可能通过设计捕捉到任何信号。
所以使用 ProctrackType=proctrack/linuxproc
就可以了。现在我可以在发送 SIGSTOP 之前捕获 SIGTSTP。
如果您必须使用 cgroups 进行进程跟踪,这当然不是完美的解决方案。