HPC串行作业脚本优化:防止单任务结束终止全任务
解决HPC串行任务单个完成后其余任务终止的问题
原脚本的核心问题是:最后一个任务以前台模式运行,当它结束时整个bash脚本会退出;而之前循环中启动的后台任务(带&)属于当前脚本的进程组,脚本退出时这些后台进程会收到SIGHUP信号被终止。即使循环中的后台任务先完成,只要最后一个前台任务结束,剩余后台任务仍会被终止。
以下是三种可行的修改方案:
方案1:用nohup让任务脱离终端控制
给所有后台任务添加nohup命令,让任务忽略SIGHUP信号,即使脚本退出也能持续运行:
修改循环内的任务启动语句:
nohup application > log 2>&1 &
最后一个任务也改为后台+nohup模式:
cd LastFolder nohup application > log 2>&1 &
方案2:用disown分离任务与当前脚本
启动后台任务后立即执行disown,将任务从当前shell的作业列表中移除,脚本退出时不会终止这些任务:
循环内的修改:
application > log 2>&1 & disown
最后一个任务的修改:
cd LastFolder application > log 2>&1 & disown
方案3:让脚本等待所有任务完成
将最后一个任务改为后台运行,再用wait命令让脚本等待所有后台进程完成,这样单个任务结束不会影响其他任务,脚本直到全部任务完成才退出:
cd LastFolder application > log 2>&1 & wait
内容的提问来源于stack exchange,提问作者PP_berry
相关产品推荐
相关产品推荐

