加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何在Tomcat6的init脚本中为“status”命令设置退出代

发布时间:2020-12-15 21:00:28 所属栏目:安全 来源:网络整理
导读:我正在安装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/funct
我正在安装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

如related ticket所述,问题是Chef检查服务的“状态”,如果“status”命令返回退出代码“0”,则不会启动它.它总是这样做,因为无论服务是否正在运行,脚本本身都能成功完成.

如果服务没有运行,我需要调整我的init脚本以返回退出代码3,根据发布的07100的Init脚本指南:

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

解决方法

你有正确的想法,但你在错误的地方有exit_var = 3.当它已经运行时,我将它放在等于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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读