设为首页 收藏本站
查看: 938|回复: 0

[经验分享] Linux学习总结(六十五)tomcat启动脚本

[复制链接]

尚未签到

发表于 2018-12-5 09:02:23 | 显示全部楼层 |阅读模式
  脚本的学习一直不得章法,之前都是囫囵吞枣式的学习,现在决定好好梳理下思路,看看究竟哪里是弱项。之前询问一个架构师大神,问shell脚本应该怎么学习,人家回答了句,shell很简单啊。现在想想对于一个编程经验丰富的人来说shell确实简单,从我在学校中对c和c++的认识,足以感知到。人的思维一定是先由整体再到过程。对于一个程序的开发来说,一定是先从整体逻辑框架再到具体细节处理。接下来我从一个脚本中去寻找我的知识的短板。
  题目要求:
在生产环境中,经常遇到tomcat无法彻底关闭,也就是说用tomcat自带的shutdown.sh脚本无法将java进程完全关掉。所以需要借助shell脚本,将进程杀死,然后再启动。
写个shell脚本,实现上述功能。备注:彻底杀死一个进程的命令是kill -9 pid
  题目分析:
1 题目要求脚本完成两个任务,关闭java进程和成功启动tomcat服务。所以它应该分为两部分:关闭和启动。就目前题目要求来说,我们只需要写stop和start两个函数,然后分别调用函数即可。如果我们要将其做成一个/etc/init.d/ 下面的启动脚本。那么只需要再该脚本基础上加上case 结构,可以执行stop和start选项。如果还需要一个重启功能,那么再定义一个restart函数,restsat功能就是先stop再start。在case多加一个条件就可以。
  2 过程中需要注意的细节。 kill -9 杀进程比较危险有可能会导致一些数据丢失,尽量少用。
3 启动后要检查是否启动成功,可以通过是否存在java进程来判断。
  脚本的整体框架就是:

#!/bin/bash
tomcatdir=/usr/local/tomcat
stop()
{
}
start()
{
}
stop
start
  具体代码为

#!/bin/bash
tomcatdir=/usr/local/tomcat    //指定tomcat的安装路径
stop()
{
echo -n "stopping tomcat."
killall java
i=0
while [ $i -lt 10 ]
do
if pgrep -l java &> dev/null    //pgrep -l 显示进程名及pid,有数据表示非空,为真。
then
killall java
sleep 1
echo -n "."    //每尝试一次输出一个点,给出状态提示。
i=$[$i+1]
else
echo -e "\033[32m[0k]\033[0m"  //输出绿色的带中括号的ok字符
break
fi
done
//程序一进来先用killall尝试杀一遍进程,如果成功直接显示绿色字体的[ok]退出,如果失败,则再尝试10次。
if pgrep -l java &> /dev/null
then
pgrep java |xargs kill -9 &> /dev/null   // xargs 表示对列出的每个进程都杀一次
sleep 1
pgrep java |xargs kill -9 &> /dev/null
fi
if pgrep java &> /dev/null
then
echo "java 进程杀不掉,请检查"
exit
fi
// 再次检查进程,如果还存在,用kill -9 强制杀,尝试两次。杀不死,输出提示信息。
}
start()
{
cd $tomcatdir
echo -n "starting tomcat."
./bin/startup.sh 2>/tmp/start_tomcat.log
i=0
while [ $i -lt 3 ]
do
if ! pgrep java &> /dev/null
then
./bin/startup.sh 2>/tmp/start_tomcat.log
echo -n "."
i=$[$i+1]
else
echo -e "\033[32m[0k]\033[0m"
break
fi
done
if ! pgrep java &> /dev/null
then
cat /tmp/start_tomcat.log
echo "tomcat 无法启动,请检查。"
fi
}
// 程序一进来先尝试启动一次,如果成功直接输出ok,如果还没找掉进程,则尝试三次。还是失败的话,给出提示退出。
if ! rpm -q psmisc &> /dev/null
then
echo "安装psmic包。"
yum install -y psmisc
fi
// 在调用函数之前,检查带有killall命令的包是否安装,没有使用yum安装。
stop
start
  封装为可以开机启动的脚本

vim /etc/init.d/tomcatd
#!/bin/bash
#chkconfig: 2345 80 20
#############################################################################
#this scripts is about tomcat start or stop
#############################################################################
function usage(){
echo "$0 {start|stop|restart}"
}
if [ $# -ne 1 ];then
usage
exit 1
fi
tomcatdir=/usr/local/tomcat
start()
{
cd $tomcatdir
echo -n "starting tomcat."
./bin/startup.sh 2>/tmp/start_tomcat.log
i=0
while [ $i -lt 3 ]
do
if ! pgrep java &> /dev/null
then
./bin/startup.sh 2>/tmp/start_tomcat.log
echo -n "."
i=$[$i+1]
else
echo -e "\033[32m[0k]\033[0m"
break
fi
done
if ! pgrep java &> /dev/null
then
cat /tmp/start_tomcat.log
echo "tomcat 无法启动,请检查。"
fi
}
stop()
{
echo -n "stopping tomcat."
killall java
i=0
while [ $i -lt 10 ]
do
if pgrep -l java &> dev/null  
then
killall java
sleep 1
echo -n "."   
i=$[$i+1]
else
echo -e "\033[32m[0k]\033[0m"  
break
fi
done
if pgrep -l java &> /dev/null
then
pgrep java |xargs kill -9 &> /dev/null   
sleep 1
pgrep java |xargs kill -9 &> /dev/null
fi
if pgrep java &> /dev/null
then
echo "java 进程杀不掉,请检查"
exit
fi
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restat
;;
esac



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-643442-1-1.html 上篇帖子: tomcat多实例启动和关闭脚本 下篇帖子: WebLogic、WebSphere、JBOSS、Tomcat之间的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表