Linux SHELL 使用crontab定时检测服务状态脚本

  |  
阅读次数
  |  
字数 785
  |  
时长 ≈ 4 分钟

使用脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/sh
#PATH=/bin:/usr/local/bin:/usr/bin:/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java

# @Author: YL
# @Date: 2017-01-25 14:50:43
# @Last Modified by: Tidy
# @Last Modified time: 2017-03-21 15:55:58
# @Description: 新增对同一目录下多tomcat的适配操作


##########################################################################################################
# crontab使用注意事项
# 如果通过crontab执行
# 1、crontab无法获取jdk变量,要在java命令之前写入jdk绝对路径
# 2、要把路径切换到要执行的sh路径下
# 注意:二者缺一不可
##########################################################################################################
# 查找jdk路径的方法
# 查找jdk安装路径的方法
# 1、$ echo $JAVA_HOME
# /usr/java/jdk1.6.0_45/bin/java
# 2、
# $ which java
# /usr/bin/java
# $ ls -lrt /usr/bin/java #/usr/bin/java是which java查出来的路径
# lrwxrwxrwx. 1 root root 22 Sep 16 2015 /usr/bin/java -> /etc/alternatives/java
# $ ls -lrt /etc/alternatives/java #/etc/alternatives/java是ls -lrt /usr/bin/java查出来的路径
# lrwxrwxrwx. 1 root root 46 Sep 16 2015 /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
#
##########################################################################################################
# 使用说明
# Tomcat服务启动、重启可以执行这些shell:sh tomcat.sh或者sh tomcat.sh start interface或者sh tomcat.sh restart interface
# kill掉Tomcat服务的进程:sh tomcat.sh kill interface
# crontab配置定时检测使用:* * * * * /opt/tomcat.sh check interface #这里tomcat.sh的路径根据自己存放位置修改
#
# 查询crontab定时器配置情况,shell执行:crontab -l
# 编辑crontab定时器,shell执行:crontab -e
##########################################################################################################

# Tomcat服务器路基
TS_HOME="/opt/tomcat-$2"
# crontab检测日记文件
TS_LOG_OPERATE="$TS_HOME/logs/console.out"
# 检测Tomcat是否启动(进程ID)
TS_PID=`ps -ef | grep $TS_HOME/bin | grep -v grep | awk '{print $2}'`
# 执行检测的用户IP地址
TS_IP=`who am i | awk '{print $5}' | sed 's/(//g' | sed 's/)//g'`
# 检测输出的日记格式
TS_PATTERN="[$(date '+%Y-%m-%d %H:%M:%S')]-[$1]-[$TS_IP] $TS_HOME/bin"

function operate(){
if [[ "$1" = "kill" ]] ; then
if [[ "$TS_PID" = "" ]] ; then
echo "$TS_PATTERN is not alive" | tee -a $TS_LOG_OPERATE
else
echo "$TS_PATTERN kill $TS_PID begining" | tee -a $TS_LOG_OPERATE
kill -9 $TS_PID
echo "$TS_PATTERN kill $TS_PID success" | tee -a $TS_LOG_OPERATE
fi
elif [[ "$1" = "start" ]]; then
cd $TS_HOME/bin
sh startup.sh
else
echo "$TS_PATTERN is not support $1" | tee -a $TS_LOG_OPERATE
fi
}

# 参数1:操作,参数2:具体tomcat名称
if [[ "$1" = "" || "$1" = "restart" || "$1" = "start" ]] ; then
operate kill
echo "$TS_PATTERN starting" | tee -a $TS_LOG_OPERATE
operate start
tail -f $TS_HOME/logs/catalina.out
elif [[ "$1" = "kill" ]] ; then
operate kill
elif [[ "$1" = "check" ]] ; then
if [[ "$TS_PID" = "" ]] ; then
echo "$TS_PATTERN starting" >> $TS_LOG_OPERATE
operate start
else
echo "$TS_PATTERN pid $TS_PID" >> $TS_LOG_OPERATE
fi
else
echo "$TS_PATTERN is not support $1" | tee -a $TS_LOG_OPERATE
fi

然后将此脚本放置在tomcat同级目录,改变其运行权限。

1
chmod -R 755 tomcat.sh

改完之后,配置crontab表达式

1
2
3
crontab -e

i

esc 键退出编辑模式.

输入:wq 保存文件并退出编辑模式。

1
2
3
4
5
* * * * * /opt/tomcat.sh check interface
* * * * * /opt/tomcat.sh check pz
* * * * * /opt/tomcat.sh check pz2
* * * * * /opt/tomcat.sh check gh
* * * * * /opt/tomcat.sh check itvpz

这里默认为一分钟执行一次检测。

如果检测出现错误,系统会发送一封邮件,具体看路径,然后进行排查。

如果是JAVA_HOME未配置请参考上一篇文章。