linux环境进程开机自检脚本
Linux下shell脚本监控Tomcat的状态并实现自动启动最近公司需要在Linux下监控tomcat的服务,一旦tomcat服务存在异常或者宕机,重启tomcat保证服务的正常运行,由于Linux下有Shell脚本可以实现此效果,就没有考虑用Java代码写了,下面是Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤。 1编写Shell脚本monitor.sh:? #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # 获取tomcat进程ID(其中[grep -w ‘tomcat‘]代码中的tomcat需要替换为你的tomcat文件夹名) # tomcat启动程序(这里注意tomcat实际安装的路径) #定义要监控的页面地址 #日志输出 Monitor() ? ####### 在写脚本的时候遇到了一个小问题,就是编写的过程中粗心,导致if的[]少了两个空格,如下: 编写完脚本后,先执行以下脚本: ./monitor.sh chmod 777 monitor.sh 安装crontab: yum install crontabs 服务操作说明: /sbin/service crond start[这里写链接内容](https://blog.csdn.net/zzq900503) //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 /sbin/service crond status //启动服务 ? 安装完成后启动crontab服务,如果有如下提示(Centos7以上版本),则按照提示启动服务即可
然后重新启动crontab服务,这时再去/tmp下面查看日志文件TomcatMonitor.log,测试结果。 接下来将crontab设为开机启动chkconfig --level 35 crond on,如果有如下提示(Centos7以上版本),则按照提示设置即可
ps -e //显示所有进程 ps -f //按树状显示 grep tomcat //只取含有tomcat的行 grep -w ‘apache-tomcat-5.5.23‘ //-w选项搜索一个单词,并且避免搜索到词中的部分字串。 搜索含有apache-tomcat-5.5.23的行 grep -v ‘grep‘ //去掉含有grep的行 awk ‘{print $2}‘ //用空格切分 取第二列 ps -ef |grep tomcat |grep -w ‘apache-tomcat-5.5.23‘|grep -v ‘grep‘|awk ‘{print $2}‘ //获取tomcat的进程id 但是仅仅是 tomcat进程存在是不够的,需要访问下 站点页面看看 是否访问正常 正常状态为200 通过curl curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code} //访问页面并保存页面内容返回状态码 如果状态码为200则 tomcat正常,否则 kill 杀掉tomcat 进程,访问tomcat的启动脚本 start.sh 启动tomcat 再是crontab解析 crontab –e //编写一条定时任务 * * * * * command minute hour day month week command 分 时 天 月 星期 命令 hour:表示小时,可以是从0到23之间的任何整数。 day:表示日期,可以是从1到31之间的任何整数。 month:表示月份,可以是从1到12之间的任何整数。 week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。 command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,6”。 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。 https://jsczxy2.iteye.com/blog/2170658 检测tomcat假死时重新启动及邮件通知检测逻辑:连续3次访问tomcat提供的接口,若3次响应码都不为200,则自动重启tomcat #!/bin/bash source /etc/profile IP=10.78.1.183 PORT=8114 TOMCAT_DIR=/soft/tomcat_8114 #定义发送邮件函数 function send_mail(){ maillist=( [email?protected] ) DATE=`date +‘%F %T‘` SUBJECT="${IP}的${PORT}端口发生故障,已自动重启!" CONTENT="时间:${DATE}n主机:${IP}n事件:${PORT}端口发生重启" for mail in ${maillist[*]};do echo -e "${CONTENT}" | mail -s "${SUBJECT}" $mail done } #对接口访问3次 declare -i NUM=0 for i in `seq 1 3`;do CODE=$(/usr/bin/curl -I -m 10 -o /dev/null -s -w %{http_code}"n" http://${IP}:${PORT}) if [ $CODE == "000" ];then ((NUM++)) fi sleep 3 done #根据NUM的值来确定是否重启tomcat,NUM=3时进行重启 if [ $NUM == 3 ];then IS_LIVING=`jps -m -l -v | grep "${PORT}" | wc -l` if [ ${IS_LIVING} -eq 1 ];then PID=`jps -m -l -v | grep "${PORT}" | awk ‘{print $1}‘` kill -9 $PID ${TOMCAT_DIR}/bin/startup.sh elif [ ${IS_LIVING} -eq 0 ];then ${TOMCAT_DIR}/bin/startup.sh fi send_mail fi
任务计划:每5分钟检测一次 */5 * * * * /server/scripts/tomcat/check_8114.sh &> /dev/null
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |