2013-02-14 62 views
1

我正在寻求关于从shell脚本启动(java)程序的最佳实践的建议。在后台启动任务的shell启动脚本的返回代码

目前我们公司内部的做法似乎有一个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启动程序的最佳做法是什么?背景上的跑步是否有一些我忽略的好处?

回答

0

你应该看看at和batch,可能cron。这些都是非交互式运行命令脚本,作业流的所有工具。在运行作业之后,将stderr输出发送回用户 - 默认行为。

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

batch命令将让你写的一系列命令到一个文件,然后执行该文件,就好像它是标准输入,你也可以做到这一点交互。

cron作业(crontab)在指定的时间和日期运行,就像每个星期一0200一样。这似乎不符合你的问题。

试试这个:

http://www.thegeekstuff.com/2010/06/at-atq-atrm-batch-command-examples/