gpt4 book ai didi

slurm - 如何将超时信号发送到 sbatch 中的包装命令?

转载 作者:行者123 更新时间:2023-12-05 05:11:47 28 4
gpt4 key购买 nike

我有一个程序,当它收到 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 信号? ?

最佳答案

您的命令将 USR1 发送到由 --wrap 创建的 shell。但是,如果您希望捕获和处理信号,您将需要编写 shell 函数来处理信号,这对于 --wrap 命令来说可能太多了。

这些人正在这样做,但您无法查看他们的 setup.sh 脚本以了解他们正在定义什么。 https://docs.nersc.gov/jobs/examples/#annotated-example-automated-variable-time-jobs

注意他们使用“.”在同一进程中运行 setup.sh 中的代码,而不是生成子 shell。你需要那个。

这些人描述了一种创建您需要的函数的好方法:Is it possible to detect *which* trap signal in bash?

唯一没有显示的是在接收信号时实际采取行动的功能。这是我写的,它是这样做的——把它放在一个可以从任何用户的 sbatch 提交脚本中包含的文件中,并向他们展示如何使用它和 --signal 选项:

trap_with_arg() {
func="$1" ; shift
for sig ; do
echo "setting trap for $sig"
trap "$func $sig" "$sig"
done
}

func_trap () {
echo "called with sig $1"
case $1 in
USR1)
echo "caught SIGUSR1, making ABORT file"
date
cd $WORKDIR
touch ABORT
ls -l ABORT
;;
*) echo "something else" ;;
esac
}

trap_with_arg func_trap USR1 USR2

关于slurm - 如何将超时信号发送到 sbatch 中的包装命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170629/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com