【发布时间】:2019-03-14 19:30:40
【问题描述】:
我有一个程序,当它收到SIGUSR1 时,会写入一些输出并退出。我正在尝试让sbatch 在超时之前通知该程序。
我将程序加入队列使用:
sbatch -t 06:00:00 --signal=USR1 ... --wrap my_program
但my_program 从未收到信号。我尝试在程序运行时发送信号,使用:scancel -s USR1 <JOBID>,但没有任何成功。我也试过scancel --full,但它会杀死包装器并且my_program 不会收到通知。
一种选择是编写一个包装 my_program 并捕获信号的 bash 文件,将其转发到 my_program(类似于 this example),但我不需要这个繁琐的 bash 文件来处理其他任何事情。另外,sbatch --signal 文档非常清楚地说明,当您要通知封装的 bash 文件时,您需要指定 signal=B:,所以我认为 bash 包装器并不是真正需要的。
那么,有没有办法向使用sbatch --wrap 排队的程序发送 SIGUSR1 信号?
【问题讨论】:
-
my_program是否正在启动作业步骤?你为什么不使用signal=B:USR1?--wrap是创建一次性bash脚本的简写,所以还是有shell进程的。