1

我正在寻求有关从 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 启动程序的最佳实践是什么?在后台运行是否有一些我忽略的好处?

4

1 回答 1

0

您应该查看并批处理,可能还有 cron。这些都是以非交互方式运行命令脚本、作业流的工具。at 运行作业,然后将 stderr 输出通过电子邮件发送回用户 - 默认行为。

at -k now <<!
$JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1
!

批处理命令将让您将一系列命令写入文件,然后像执行标准输入一样执行文件,您也可以交互地执行此操作。

cron 作业 (crontab) 在指定的时间和日期运行,例如每周一 0200。这似乎不适合您的问题。

尝试这个:

http://www.thegeekstuff.com/2010/06/at-atq-atrm-batch-command-examples/
于 2013-02-14T13:18:53.187 回答