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 解决方法
你有正确的想法,但你在错误的地方有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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |