SLURM でバッチ ジョブを実行しています。ジョブファイルで開始するプロセスは反復的です。各反復の後、stop というファイルを作成することにより、プログラムをそっと強制終了できます。このような停止コマンドは、walltime 制限によってジョブが強制終了される 1 時間前に自動的に発行されることを望みます。
2812 次
2 に答える
0
damienfrancois の回答を追加するには、バッチ スクリプトが別のブロッキング プロセスを開始した場合、シグナルが伝播されないことに注意してください。プロセスはバックグラウンドで起動してから待機する必要があります。つまり、次のようになります。
SBATCH --signal=B:USR1@600
trap "echo Signal USR1 received!; kill -s SIGUSR1 ${PID}; wait ${PID}" USR1
my_script & # launch my_script as a background job
PID=$! # get the PID of the background job
wait ${PID} # wait for the background job to finish
これはmy_script
バックグラウンドで起動しSIGUSR1
、ジョブが終了する 10 分前に slurm がシグナルを送信したときにシグナルを伝達します。これにより、スクリプトはそれをキャッチし、チェックポイントを保存して正常に終了できます。
于 2021-06-21T07:09:45.720 に答える