作为 SLURM + Snakemake 管道的一部分,我有一个脚本将数据库服务器作为 SLURM 作业启动,另一个脚本通过
scancel
停止它。
HPC 批处理系统可能不应该以这种方式使用,但目前 SLURM 节点是我必须为该数据库提供所需 RAM 和 CPU 数量的唯一资源。无论如何,相应的作业都是临时的(只要管道需要它,它就会运行,其他一切都会停止)。
我的问题是这个用例是否应该以更合适/惯用的方式进行管理。特别是,我的脚本的用户刚刚告诉我,他们在
acct
输出中看到失败的作业。这些是服务器作业,显然由于 scancel
中断而导致失败。显然,这是误报,我想避免它。
被取消的工作不一定会在会计中显示为
FAILED
。它们将显示为 FAILED
是被 scancel
命令中断并以非零返回代码退出的进程。
您应该在数据库服务器的文档中确认这一点,但似乎在收到 SIGINT 信号后,数据库服务器认为这是错误终止并以非零代码退出。
在这种情况下,您应该使用
trap
Bash 函数捕获 SIGINT 信号,并运行正确的命令来关闭该函数中的服务器。