第一步 crontab 安装及基本命令了解
使用yum安装crontab服务
yum install vixie-cron
安装成功, 看一下常用命令
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
在CentOS系统中加入开机自动启动: chkconfig --level 35 crond on
第二步 tomcat重启 Shell 脚本编写 并授权 (每次改动脚本都要重启crontab)
脚本 controlTomcat.sh 如下==========================
#!/bin/sh
#载入环境变量第一种方式(要改成自己的jdk相关地址)
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/java/jdk1.7.0_75/bin
#export JAVA_HOME=/usr/local/java/jdk1.7.0_75
#export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
#export PATH=$PATH:$JAVA_HOME/bin
#载入环境变量第二种方式
source /etc/profile
# 获取tomcat进程ID 要改成自己的tomcat目录名 (下面标蓝的是自己的tomcat名字,及相关自定义路径)
TomcatID=$(ps -ef |grep tomcat_test|grep -w /opt/tomcat_test/conf |grep -v grep|awk '{print $2}')
# tomcat启动程序脚本路径 及 tomcat缓存work路径
StartTomcat=/opt/tomcat_test/bin/startup.sh
TomcatCache=/opt/tomcat_test/work
# 定义监控项目的是否活着的请求url 地址
WebUrl=http://localhost:8080/safround_ent/syslogin/checkServiceIfDone#定义发送邮件函数
#IP=47.93.103.197
#PORT=8080
#function send_mail(){
# maillist=(
# 187631777222111@163.com
# )
# 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
#}
# 日志输出 (用于输出监控日志和监控报错日志(报错日志就是请求接口返回的数值))
TomcatMonitorLog=/opt/tomcat_test/logs/TomcatMonitor.log
GetPageInfo=/opt/tomcat_test/logs/PageInfo.log
Monitor()
{
echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
if [ "$TomcatID" != "" ];then
echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
if [ $TomcatServiceCode -eq 200 ];then
echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"
else
echo "[error]tomcat页面出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
echo "[error]页面访问出错,开始重启tomcat"
echo "=============杀进程开始 $TomcatID ========"
kill -9 $TomcatID
echo "=============杀进程结束==================="
echo "=============延时3秒睡眠开始=============="
sleep 3
echo "=============延时3秒睡眠结束=============="
echo "=============清理tomcat缓存开始==========="
rm -rf $TomcatCache # 清理tomcat缓存
echo "=============清理tomcat缓存结束==============="
echo "=============重启开始====================="
$StartTomcat
echo "=============重启进行中……================="#send_mail
fi
else
echo "[error]tomcat进程不存在!tomcat开始自动重启..."
echo "[info]$StartTomcat,请稍候......"
rm -rf $TomcatCache
$StartTomcat#send_mail
fi
echo "------------------------------"
}
Monitor>>$TomcatMonitorLog
授权如下============================
权授: chmod a+x controlTomcat.sh #代表授权所有用户这个文件的操作权限
第三步 crontab 定时监控执行 Shell 脚本 (注意shell脚本的绝对路径)
两种方式
第一种:编辑 /etc/crontab 文件 (指定频次,及执行者 ,及执行的shell脚本绝对路径)
第二种:命令直接编辑 保存
crontab -e //编写一条定时任务
crontab -l //列出当前用户定时任务
crontab -r //删除当前用户定时任务
crontab文件格式:
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
minute: 表示分钟,可以是从0到59之间的任何整数。hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
参考文献
https://www.jianshu.com/p/3c05025066d3
https://www.cnblogs.com/zgq123456/p/10966810.html
https://blog.csdn.net/zb313982521/article/details/87914480
如要 发送邮件 放开上面 脚本中注掉的发送邮件函数,并参考 上面后两篇大神文章