LSF 任务运行失败,为什么任务状态却为DONE ?
问题
用户反馈提交任务后,任务仅运行 1~2 秒后就退出,没有正常结束。但通过 bjobs 查看任务,却显示任务状态为 DONE 即正常退出。因此用户怀疑 LSF 有问题,不能正确报告任务状态。
排查思路
首先不通过LSF运行命令,看看是否能重现问题。
以用户帐号登录任务执行主机,进入任务执行目录,运行任务命令。
用户的命令示例如下:
ihs /job_data/xyz.tcl &
任务启动后,很快输出了错误信息(略)。
查看命令的退出码
echo $?
0
在 linux 系统命令错误通常以非零值为退出码。为什么显示为 0 ?
仔细查看用户命令,原来命令是以后台程序方式运行。如果不以后台程序运行,退出码是什么呢?
ihs /job_data/xyz.tcl
输出(略)。查看命令的退出码,此时显示的退出码为 1 。
echo $?
1
至此,原因查明,将程序在后台运行,程序退出码不能正常返回,导致 LSF 显示的任务状态和实际状态不符。
那程序在后台运行就不能获取程序退出码,为什么呢?
查看 bash 手册,官方说明如下:
If a command is terminated by the control operator &, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0.
后台程序会在当前 shell 的子 shell 中运行,当前shell会立即以 0 返回。
解决方案
首先,提交任务时不要将任务放到后台执行。
然后,根据应用报错信息,修复问题。