2011-12-22 55 views
0

我在執行通過cron Ubuntu的服務器每天腳本運行的Java文件。我想將其列入的if/else塊中使得如果執行java文件成功其應發送回送消息「全成」,如果失敗就應該發送回送消息「失敗」。的Linux腳本的if/else

下面是該腳本的現有生產線updateGroupScores.sh

java -classpath "/home/ubuntu/live/build/WEB-INF/lib/*:/var/lib/tomcat7/lib/*:/home/ubuntu/live/build/WEB-INF/classes/" com.generalsentiment.update.UpdateGroupScores > /var/gs/livecron/crongroupsentimentscores.log 

我想修改它們像 -

if (java file runs successfull) 
then 
echo "cron job successfull" 

else 
then 
echo "cron job failed" 

- 感謝

回答

0

如果你可以依靠Java命令的退出狀態,然後簡單地寫:

C1="/home/ubuntu/live/build/WEB-INF/lib/*" 
C2="/var/lib/tomcat7/lib/*:/home/ubuntu/live/build/WEB-INF/classes/" 
LOG="/var/gs/livecron/crongroupsentimentscores.log" 

if java -classpath "$C1:$C2" com.generalsentiment.update.UpdateGroupScores > "$LOG" 
then echo "cron job successful" 
else echo "cron job failed" 
fi 

注意,輸出(至少在某些系統上)郵寄給您,還是輸給了/dev/null。這些變量使得SO屏幕上的一切都變得更好。我可能也會在一個普通的腳本中使用它們,儘管這是一個臨界的決定。

如果你不能依靠退出狀態,你必須做別的事情,以決定其是否成功與否,但總的原則是大同小異不管。

+0

真棒...對我來說工作正常... thanx喬納森..... :) – 2011-12-22 06:31:28

1

假設你的Shell是Bash:

使用$?

  • $?是包含先前命令的返回碼(0如果成功)

    java -classpath "/home/ubuntu/live/build/WEB-INF/lib/*:/var/lib/tomcat7/lib/*:/home/ubuntu/live/build/WEB-INF/classes/" com.generalsentiment.update.UpdateGroupScores > /var/gs/livecron/crongroupsentimentscores.log 
    
    if [[ $? == 0 ]] 
    then 
        echo "cron job successful" 
    else 
        echo "cron job failed" 
    fi 
    

使用& &和可變||

  • & &使得如果先前的成功
  • 要執行以下命令||使得如果以前沒有成功

這樣你就可以尾巴執行的行或命令要執行下面的命令:& &回聲「計劃任務成功」 ||回聲「cron作業失敗」

+0

你可以簡單地用'if'測試命令的退出狀態;所有各種測試命令('['和'[[''例如))都是檢查一個條件並以正確的狀態退出。從前,很久很久以前,在'test'命令不是內置在外殼(如果它被調用爲'['它需要它的最後一個參數是']'),並從字面上執行。如今,它是一個內置的,但同樣的基本概念適用。所以,你可以寫'if cmd1 ...;然後迴應這個;其他人迴應說; fi'。 – 2011-12-22 06:40:43