2011-12-22 54 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