2013-02-14 107 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/