Centos下检测Tomcat是否正常运行shell脚本
背景故事
最近一直都在公司运营办公室上班,每天的工作比较忙碌,博客的更新速度也有点慢了下来,不过忙碌之中还是解决了一些实际问题。
运营办公室内有一台IBM System X3400 M3(如果大D我没记错的话),上面部署着Tomcat,后来有同事反映说有时会无法访问服务器上跑的网站,ssh连接到服务器上看了一下,往往不能访问时是由于Tomcat进程自动关闭掉了,大D也没有花时间查看日志去看为什么关闭了,于是干脆写个shell脚本出来,每当无法访问的时候让同事运行一下就好了。
正文
由于并不了解Tomcat,所以这个脚本可能有一些局限性,各位看官可以根据自己的实际需要修改一下,以适配您自己的生产环境。
具体思路就是首先查看Tomcat所依赖的进程是否存在,如果进程存在的话,那么则检测网站首页的返回码是不是200,以确定Tomcat的服务是否正常。
直接丢代码出来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
TomcatID=`ps -ef|grep tomcat-8.0.32|grep -v 'grep'|head -1|awk '{print $2}'` WebUrl=http://localhost:8080 echo "Check Tomcat Status....." if [ $TomcatID ];then echo "Tomcat is running" HttpServerCode=`curl -I $WebUrl > /home/sjww/log/status.txt` Status=`cat /home/sjww/log/status.txt|head -1|awk '{print $2}'` if [ $Status -eq 200 ];then echo "Tomcat is working" fi else echo "Tomcat is error" kill -9 $TomcatID sleep 3 /usr/local/tomcat-8.0.32/bin/startup.sh sleep 10 fi |
最后一个fi前面的sleep 10其实可以删去,为什么要加这个,后面会说到。
番外
写完之后直接远程到ssh上面跑,嘿,还不错。但是这时候大D忘记了一个问题,大D的同事并不会使用Linux的bash,更别提通过ssh连接上去然后直接执行.sh了。
查看了一下服务器,基本上一直会有一个普通权限用户登陆上去。再加上脚本需要root账户来运行,本来想通过shell来进行提权操作,直接提权到root,搜索了一圈无果,思考了一番,直接曲线救国。
也就是通过ssh,以root的身份直接登陆localhost,然后执行脚本。
那么这里需要安装sshpass来解决ssh登陆不能在命令行中制定密码的问题。
可以直接在https://sourceforge.net/projects/sshpass/上下载到sshpass 1.06的压缩包然后进行编译安装。
1 2 3 4 5 |
tar -zxvf sshpass-1.06.tar.gz cd sshpass-1.06 ./configure --prefix=/opt/sshpass #指定一下安装目录,可以根据你的需求调整 make && make install cp /opt/sshpass/bin/sshpass /usr/bin #将sshpass的bin复制到/usr/bin当中 |
写一个新的shell脚本,这里取名为first.sh,该脚本的用户组均设置成普通用户的用户组。同时+x执行权限。
1 |
shpass -p '123456' ssh root@localhost /home/abc/checktomcat.sh |
这样就算是完成了在普通用户身份下去使用root用户脚本的问题了,最后就是将终端添加到桌面上,然后右键-属性-基本-命令,将内容修改为:
1 2 |
gnome-terminal -x /home/abc/first.sh |
当然,其实最好的办法就是直接写进cron定时运行,然而大D并没有这样做,你猜为什么?
已有 3 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
66大神
如果不是80端口,用非root用户部署tomcat就可以了啊~
@adamfei 这个我就不管了,公司研发他们来部署的tomcat~