Bash 如何设置“退出”的退出代码;“地位”;Tomcat6的初始化脚本中的命令

Bash 如何设置“退出”的退出代码;“地位”;Tomcat6的初始化脚本中的命令,bash,tomcat6,chef-infra,init,chef-solo,Bash,Tomcat6,Chef Infra,Init,Chef Solo,我正在安装Tomcat6并对/etc/init.d/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 sys

我正在安装Tomcat6并对/etc/init.d/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
我将初始脚本修改为:

#!/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
#/bin/bash
#描述:Tomcat6服务
#进程名称:java
#chkconfig:-99 1
#源函数库。
. /etc/init.d/functions
#tomcat6的源sysconfig
if[-f/etc/sysconfig/tomcat6];然后
. /etc/sysconfig/tomcat6
fi
[-d“$CATALINA_HOME”]|{echo“Tomcat需要$CATALINA_HOME.”退出1;}
退出变量=0
每箱1元
开始|停止|运行)
如果su$TOMCAT_用户bash-c“cd$CATALINA_HOME/logs;$CATALINA_HOME/bin/CATALINA.sh$1”;然后
echo-n“Tomcat$1成功”
[$1==“停止”]&&rm-f$CATALINA\u PID
其他的
echo-n“Tomcat$1中的错误:$?”
退出变量=1
fi
;;
重新启动)
零美元起价
0美元一站
;;
(状态)
如果[-f“$CATALINA_PID”];然后
阅读kpid<“$CATALINA\u PID”
如果ps--pid$kpid 2>&11>/dev/null;然后
echo“$0已在${kpid}上运行”
退出变量=0
其他的
echo“$CATALINA_PID已找到,但$kpid未运行”
退出变量=4
fi
取消设置kpid
其他的
回显“$0已停止”
exit_var=3#修复了厨师长未启动已停止服务的问题。
fi
;;
以撒
退出$exit_var
但这些并没有真正改变脚本的退出代码。如何为不同的案例场景设置不同的退出代码

版本信息:

  • 操作系统:CentOS 6.5
  • 厨师:10:20
  • Tomcat:6.0.39

    • 你的想法是正确的,但是你在错误的地方退出了。我已将其放置在下面,使其在已运行的状态下等于
      3

      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
      
      状态)
      如果[-f“$CATALINA_PID”];然后
      阅读kpid<“$CATALINA\u PID”
      如果ps--pid$kpid 2>&11>/dev/null;然后
      echo“$0已在${kpid}上运行”
      ##修复了Chef未启动已停止服务的问题。
      exit_var=3##这是已运行的条件
      其他的
      echo“$CATALINA_PID已找到,但$kpid未运行”
      退出变量=4
      fi
      取消设置kpid
      其他的
      回显“$0已停止”
      exit_var=5#(根据需要重新编号为5)
      fi
      ;;
      以撒
      退出$exit_var
      
      是否在此脚本中
      重新启动
      启动
      然后
      停止
      。。。也许是一个“
      restop
      ”?
      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