我正在寻求有关从 shell 脚本启动(java)程序的最佳实践的建议。
目前,我们公司的做法似乎是有一个 shell 脚本,它设置所有环境变量并在后台启动 java(在这种情况下并不重要)进程,类似于:
nohup $JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1 &
这是脚本的最后一行。我们正在启动单一进程。
我的一个疑问是,即使在程序由于某些异常/错误而无法启动的情况下,此类 shell 进程的返回码始终为 0。这使得监控工具变得很困难——例如,它们不能依赖 shell 退出代码。
我发现这可以通过等待过程结束来解决,例如:
nohup $JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1 &
wait $!
但我的理解是,这使得最后一个&
自运行以来完全没用:
nohup $JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1
会有同样的效果。
所以我的问题是:从 shell 启动程序的最佳实践是什么?在后台运行是否有一些我忽略的好处?