免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8880 | 回复: 5
打印 上一主题 下一主题

请教shell脚本返回值的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-16 10:16 |只看该作者 |倒序浏览
我写了一个tomcat监控和启动停止脚本,现在出现了点问题,请教高人指点一下,脚本如下

#!/bin/bash
#
# Startup script for the tomcat
#
# chkconfig: 345 95 15
# description: tomcat service script
#
# Source function library.
. /etc/rc.d/init.d/functions

TOMCAT_HOME=/opt/apache-tomcat-5.5.27


RETVAL=1

tomcat(){
source /etc/profile
cd /root/
wget --quiet --timeout=1 --tries=2 --cache=off "http://test.gongshe.tv/index.jsp"
a=`grep body index.jsp* | wc -l`
if [ $a -ge 1 ];
then
echo "tomcat ok"
RETVAL=0
rm -f index.jsp*
exit;
else
rm -f index.jsp*
sleep 1s
wget --quiet --timeout=1 --tries=2 --cache=off "http://test.gongshe.tv/index.jsp"
a=`grep body index..jsp* | wc -l`
if [ $a ge 1 ];
then echo "second is ok"
RETVAL=0
rm -f index.jsp*
exit;
else
RETVAL=1
kill -9 `ps -ef  | grep java | grep -v grep | awk '{print $2}'`
RETVAL=1
   fi
fi
#rm -f monitor.jsp*
}



export TOMCAT_HOME=/opt/apache-tomcat-5.5.27

checkjava(){
if [ -z "$JAVA_HOME" ]; then
export JAVA_HOME=/usr/java/jdk1.5.0
fi
}

start(){
checkjava
#checkrun
   if [ $RETVAL -eq 1 ]; then
echo "Starting tomcat"
$TOMCAT_HOME/bin/startup.sh
touch /var/lock/subsys/tomcat
else
echo "tomcat allready running"
fi
}

stop(){
checkjava
checkrun
if [ $RETVAL -eq 0 ]; then
echo "Shutting down tomcat"
$TOMCAT_HOME/bin/shutdown.sh
#while [ $RETVAL -eq 1 ]; do
# sleep 5
# checkrun
#done
rm -f /var/lock/subsys/tomcat
else
echo "tomcat not running"
fi
checkrun
}

checkrun(){
read line < /tmp/tomcat_process_count.txt
if [ $line -gt 0 ]; then
RETVAL=0
return $RETVAL
else
RETVAL=1
return $RETVAL
fi
}

status(){
#checkrun
tomcat
echo "first" $RETVAL
if [ $RETVAL -eq 0 ]; then
        echo -n "Tomcat ( pid "
        ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}'
        echo -n ") is running..."
echo $RETVAL
else
        echo "Tomcat is stopped000000"
echo $RETVAL
fi
echo "---------------------------------------------"
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
# su - tomcat -c "$TOMCAT_HOME/bin/catalina.sh version"
;;
checktomcat)
tomcat
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac

exit 0
========================================================================================

看完脚本,是错误返回1 正确返回0
我把tomcat停到,然后用这个脚本去检测,
[root@web2 init.d]# ./tomcat status
grep: index.jsp*: No such file or directory
grep: index..jsp*: No such file or directory
./tomcat: line 32: [: ge: binary operator expected
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
first 1
Tomcat is stopped000000
1
---------------------------------------------
返回的结果是正确的,返回值“1”
然后我在用 echo $? 返回的值怎么是“0”
[root@web2 init.d]# echo $?
0
[root@web2 init.d]#
请教高人指点一下,我用的命令不对,还是脚本写的有问题。


如果不按照这样的要求去写,redhat自带cluster 就不能实现应用服务自动来回切换。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2009-11-16 10:42 |只看该作者
exit 0不是你指定的?

论坛徽章:
0
3 [报告]
发表于 2009-11-16 10:44 |只看该作者
没有人回答,自己顶一下!!!

论坛徽章:
0
4 [报告]
发表于 2009-11-16 11:05 |只看该作者
$?是你最后一个命令的返回值,
你的脚本最后一个命令是exit 0

论坛徽章:
0
5 [报告]
发表于 2009-11-16 12:40 |只看该作者
我把0 去掉,也不行。把exit 0 修改成exit;
在用echo $?
还是显示0

论坛徽章:
0
6 [报告]
发表于 2009-11-16 14:18 |只看该作者

回复 #5 lydongkill 的帖子

不带参数的exit返回的是上最后一条命令的返回值
你看看你的脚本最后一条命令是什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP