バッチジョブスクリプトに対して,以下のようにユーザ定義シグナルSIGUSR1を出しても,応答しません。
#!/bin/bash #SBATCH --job-name=usr #SBATCH --partition=M-debug #SBATCH --nodes=1 #SBATCH --ntasks=64 #SBATCH --mem=16GB #SBATCH --time=00:15:00 #SBATCH --signal=B:USR1@30 trap 'echo "$(date) got USR1" >> "$SLURM_SUBMIT_DIR/signal.log"' USR1 srun ./a.out
Linux の通常のシグナルである SIGUSR1/SIGUSR2(ユーザ定義シグナル)を Slurm 経由でジョブスクリプトに送信し、受信時に任意の処理を行うことができます。
しかし、シグナルが届いた時点でジョブが実行中だと、trap で定義した処理が実行されないままタイムアウトとなり、ジョブ自体が終了してしまうことがあります。その結果、シグナル受信時に実行したかった処理を行えない場合があります。
以下のように./a.outをバックグランドで実行するとシグナルを受けることができます。
#!/bin/bash #SBATCH --job-name=usr #SBATCH --partition=M-debug #SBATCH --nodes=1 #SBATCH --ntasks=64 #SBATCH --mem=16GB #SBATCH --time=00:15:00 #SBATCH --signal=B:USR1@30 trap 'echo "$(date) got USR1" >> "$SLURM_SUBMIT_DIR/signal.log"' USR1 srun ./a.out & SRUN_PID=$! wait $SRUN_PID