linux centos7 crond定时任务,监控Tomcat进程并进行重新启动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsqfengbao/article/details/91048391

自己写的系统,进程性由于CPU过高导致偷偷的挂掉,系统上部署的服务无法使用给客户造成损失。

原先准备考虑守护进程的写法,但百度了一圈,感觉挺复杂的,后来就采用了linux crond定时任务的方法对系统进程进行监控并重启。

crondtab命令在centos7上与之前的版本有很大的区别。之前的命令都是类似这样的:

首先,确认服务器是否开启定时任务计划服务,只有root用户才能对crond服务进行开启和关闭

[root@mimvp-bj script]# service crond status
crond is stopped
[root@mimvp-bj script]# service crond start
Starting crond:                                            [  OK  ]
[root@mimvp-bj script]# service crond status
crond (pid  24577) is running…

但centos7上面的命令会提示不存在,自动跳转到下面这个命令了。

步骤1:查看crond.serivce服务的自启动状态
[root@localhost ~]# systemctl is-enabled crond.service
disabled

此时crond.serivce的自启动状态为disabled

步骤2:开启crond.serivce服务自启动

[root@localhost ~]# systemctl enable crond.service

[root@localhost ~]# systemctl is-enabled crond.service
enabled

列出所有的启动文件:

systemctl list-unit-files

列出所有状态为enable的启动文件

systemctl list-unit-files | grep enable

关闭crond.serivce的自启动状态

systemctl disable crond.service

步骤1:查看crond.service的启动状态

systemctl status crond.service

开启crond.service服务命令

systemctl start crond.service

停止crond.service服务命令

systemctl stop crond.service

按照上面的命令确保在centos7上面crond服务是启动的状态。然后编写监控脚本如下:

#!/bin/sh
# function:自动监控tomcat进程,挂了就执行重启操作

# 获取tomcat PPID
TomcatID=$(ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}')
# tomcat_startup
StartTomcat=/opt/service/tomcat/bin/startup.sh

#TOmcatCache=/opt/service/tomcatBlog/work

#定义要监控的页面地址
WebUrl=http://localhost:8080/manager/

# 日志输出
GetPageInfo=/dev/null
TomcatMonitorLog=/opt/service/logs/TomcatMonitor.log

Monitor()
{
	echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
	if [ "$TomcatID" ];then
		echo "[info]tomcat进程ID为:$TomcatID."
		#获取返回状态码
		TomcatServiceCode=$(curl -s -o /dev/null --connect-timeout 10 -m 20 $WebUrl -w %{http_code})
		if [ $TomcatServiceCode -eq 200 ]; then
			echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常."
		else
			echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
			echo "[error]开始重启tomcat"
			kill -9 $TomcatID #杀掉原Tomcat进程
			sleep 5
			# rm -rf $TomcatCache #清理Tomcat缓存
			$StartTomcat
		fi
	else
		echo "[error]进程不存在!tomcat自动重启..."
		echo "[info]$StartTomcat,请稍后....."
		#rm -rf $TomcatCache
		$StartTomcat
	fi
	echo "---------------------------------------"
}
Monitor>>$TomcatMonitorLog

这个脚本放到自己的目录上面

其中tomcat_startup 是tomcat启动脚本的路径,WebUrl是要监控的页面地址,使用时只需要修改它们就可以。

获取tomcat运行状态的命令

ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}'
访问页面返回状态码的命令

curl -s -o /dev/null --connect-timeout 10 -m 20 http://lazyrabbit.tech -w %{http_code}

#接下来设定定时任务

添加定时任务,每五分钟执行一次

crontab -e
*/5 * * * * /usr/local/tomcat/monitor.sh

查看定时任务

crontab -l
#可能出现的问题

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

At least one of these environment variable is needed to run this program
tomcat启动没有找到jdk环境,需要在tomcat/bin路径下的setclasspath.sh文件中配置jdk路径

export JAVA_HOME=/usr/local/java/jdk8
export JRE_HOME=/usr/local/java/jdk8/jre
/usr/local/tomcat/monitor.sh: Permission denied

这个脚本没有权限,需要设置权限

chmod 777 monitor.sh

 如果报下面的错误:

linux  Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

可以将JAVA_HOME和JRE_HOME加到tomcat/bin/catalina.sh的最上面

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_202
export JRE_HOME=/usr/lib/jvm/jdk1.8.0_202/jre
 

其中的JAVA_HOME和JRE_HOME换成自己服务器上的地址

然后更改catalina.sh的权限: chmod a+x catalina.sh

然后观察定时任务是否执行。搞定!

有需要用的小伙伴,拿去吧

猜你喜欢

转载自blog.csdn.net/jsqfengbao/article/details/91048391