我正在寻求关于从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启动程序的最佳实践是什么?在背景上运行是否有一些我忽略的好处?
答案 0 :(得分:0)
你应该研究和批处理,可能还有cron。这些都是以非交互方式运行命令脚本,作业流的工具。在运行一个作业然后将stderr输出发送回用户 - 默认行为。
at -k now <<!
$JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1
!
批处理命令允许您将一系列命令写入文件,然后执行该文件,就像它是stdin一样,您也可以交互式地执行此操作。
cron jobs(crontab)在指定的时间和日期运行,例如每周一的0200.这似乎不适合您的问题。
试试这个:
http://www.thegeekstuff.com/2010/06/at-atq-atrm-batch-command-examples/