Linux Crontab 服务进程守护

Colin 1年前 ⋅ 165 阅读

 

一、tomcat、mysql...等服务,万一出现宕机怎么办?

1,tomcat守护者,每5分钟检查一次tomcat是否被关闭,关闭的话就执行tomcat startup.sh 启动

执行 crontab -e

*/5 * * * *  [ ! "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`" = "" ] && echo "tomcat is start" >> /Users/colin/Desktop/cron.log || (/usr/local/bin/ilang "系统检测到tomcat意外关闭,正在尝试重新启动";/home/pi/windowdb/apache-tomcat-7.0.73/bin/startup.sh;/usr/local/bin/ilang "tomcat重启完毕。")

说明:/usr/local/bin/ilang 为语音朗读软件,类似于MacOS的say命令,如果没有安装或者不用语音提示,也可以替换成echo '日志信息' >> log文件之类的shell脚本语句。

如果不需要刻意朗读提示信息也可以直接使用flock文件锁方式尝试启动:

*/5 * * * * flock -xn /home/pi/windowdb/apache-tomcat-7.0.73/tomcat.lock -c "/home/pi/windowdb/apache-tomcat-7.0.73/bin/startup.sh"

 

2,tomcat重启者,每天凌晨1点钟,系统将自动杀死tomcat进程,然后执行tomcat startup.sh 启动

0 1 * * * kill -9 `ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`;/home/pi/windowdb/apache-tomcat-7.0.73/bin/startup.sh;

说明:请替换/home/pi/windowdb/apache-tomcat-7.0.73/bin/startup.sh为实际路径。如果不是tomcat进程,请替换grep 后的tomcat。

二、如何从一台服务器监控并守护另外一台服务器的tomcat服务?

演员:

1,Mac笔记本(小码)

2,树莓派(小派)

 

背景交代:

小码有时候开机,有时候又关机,不一定。而小派一直开机状态,小派上跑tomcat服务,经常宕机,估计存在内存溢出情况,但是又没时间重构项目、主要是老旧项目也不值当付出精力。

 

需求:

1,小码在开机时,主动ssh登陆到小派,检查tomcat是否开启,若未开启,则自动启动小派的tomcat。

2,小派常年开启,资源损耗严重。所以想将crontab任务部署在小码上。

 

实施步骤:

1,首先小码登陆小派需要免密码登陆。参考另外一篇《Linux ssh免密码登陆》

2,在小码笔记本上执行crontab -e,并且增加如下内容:

*/5 * * * * a="`ssh pi "ps -ef | grep tomcat | grep -v grep | awk '{print $2}'"`"; ( [ "${a}" = "" ] && (/usr/bin/say "系统检测到tomcat服务未启动,正在尝试重新启动"; echo "`/bin/date` 系统检测到tomcat没有启动,正在尝试重新启动..." >> /Users/colin/Desktop/cron.error.log; ssh pi "/home/tomcat/start.sh" ) || (echo "`/bin/date`tomcat运行中..." >> /Users/colin/Desktop/cron.info.log) )

以上shell脚本首先 ssh pi 并且执行 ps -ef 查询 tomcat 进程,将查询结果赋值给变量 a ,然后判断 a 是否等于空字符串,若等于空字符串则表示没有tomcat进程;shell 中的if 使用格式: [条件] && 执行 || 否则执行 。


全部评论: 0

    我有话说: