2014-06-25 30 views
3

我安裝的Tomcat6並使用/etc/init.d/tomcat6如下:如何設置退出代碼中的init腳本「狀態」命令的Tomcat6

#!/bin/bash 
# description: Tomcat6 service 
# processname: java 
# chkconfig: - 99 1 
## Note: CATALINA_HOME and CATALINA_PID are set elsewhere.## 

# Source function library. 
. /etc/init.d/functions 

# Source sysconfig for tomcat6 
if [ -f /etc/sysconfig/tomcat6 ]; then 
    . /etc/sysconfig/tomcat6 
fi 

[ -d "$CATALINA_HOME" ] || { echo "Tomcat requires $CATALINA_HOME."; exit 1; } 

case $1 in 

    start|stop|run) 
    if su $TOMCAT_USER bash -c "cd $CATALINA_HOME/logs; $CATALINA_HOME/bin/catalina.sh $1"; then 
     echo -n "Tomcat $1 successful" 
     [ $1 == "stop" ] && rm -f $CATALINA_PID 
    else 
     echo -n "Error in Tomcat $1: $?" 
    fi 
    ;; 

    restart) 
    $0 start 
    $0 stop 
    ;; 

    status) 
    if [ -f "$CATALINA_PID" ]; then 
     read kpid < "$CATALINA_PID" 
     if ps --pid $kpid 2>&1 1>/dev/null; then 
     echo "$0 is already running at ${kpid}" 
     else 
     echo "$CATALINA_PID found, but $kpid is not running" 
     fi 
     unset kpid 
    else 
     echo "$0 is stopped" 
    fi 
    ;; 

esac 
exit 0 

的問題,如注意這個related ticket是廚師檢查服務的「狀態」,如果「狀態」命令返回一個退出代碼「0」,它將不會啓動它。無論服務是否在運行,它始終都會執行此操作,因爲腳本本身已成功完成。

我需要適應我的init腳本如果服務沒有運行,返回的退出代碼3時,每對初始化腳本的指導方針發佈here

0 program is running or service is OK 
1 program is dead and /var/run pid file exists 
2 program is dead and /var/lock lock file exists 
3 program is not running 
4 program or service status is unknown 
5-99 reserved for future LSB use 
100-149 reserved for distribution use 
150-199 reserved for application use 
200-254 reserved 

我修改了最初的腳本:

#!/bin/bash 
# description: Tomcat6 service 
# processname: java 
# chkconfig: - 99 1 

# Source function library. 
. /etc/init.d/functions 

# Source sysconfig for tomcat6 
if [ -f /etc/sysconfig/tomcat6 ]; then 
    . /etc/sysconfig/tomcat6 
fi 

[ -d "$CATALINA_HOME" ] || { echo "Tomcat requires $CATALINA_HOME."; exit 1; } 

exit_var=0 

case $1 in 

    start|stop|run) 
    if su $TOMCAT_USER bash -c "cd $CATALINA_HOME/logs; $CATALINA_HOME/bin/catalina.sh $1"; then 
     echo -n "Tomcat $1 successful" 
     [ $1 == "stop" ] && rm -f $CATALINA_PID 
    else 
     echo -n "Error in Tomcat $1: $?" 
     exit_var=1 
    fi 
    ;; 

    restart) 
    $0 start 
    $0 stop 
    ;; 

    status) 
    if [ -f "$CATALINA_PID" ]; then 
     read kpid < "$CATALINA_PID" 
     if ps --pid $kpid 2>&1 1>/dev/null; then 
     echo "$0 is already running at ${kpid}" 
     exit_var=0 
     else 
     echo "$CATALINA_PID found, but $kpid is not running" 
     exit_var=4 
     fi 
     unset kpid 
    else 
     echo "$0 is stopped" 
     exit_var=3 # Fixes issue with Chef not starting a stopped service. 
    fi 
    ;; 

esac 
exit $exit_var 

但是這些並不能真正改變腳本的退出碼。如何爲不同情況設置不同的退出碼?

版本信息:

  • OS:CentOS的6.5
  • 廚師:10.20
  • 的Tomcat:6.0.39
+0

是否'restart'在這個腳本'start' THEN'stop' ......也許是「'restop'」? – KCD

回答

3

你有正確的想法,但你必須在exit_var=3錯誤的地方。我已經把它放在下面等於3status時,它已經在運行:

status) 
    if [ -f "$CATALINA_PID" ]; then 
     read kpid < "$CATALINA_PID" 
     if ps --pid $kpid 2>&1 1>/dev/null; then 
      echo "$0 is already running at ${kpid}" 
      ## Fixes issue with Chef not starting a stopped service. 
      exit_var=3 ## this is the condition of already running 
     else 
      echo "$CATALINA_PID found, but $kpid is not running" 
      exit_var=4 
     fi 
     unset kpid 
    else 
     echo "$0 is stopped" 
     exit_var=5 # (renumbered 5 set as you desire) 
    fi 
    ;; 

esac 
exit $exit_var