Linux上用cron定时任务加Shell脚本实现判断服务挂掉宕机后自动重启服务

1、安装cron

一般买的云服务器上都会自带有cron的

但是如果没有安装的话,分别执行下边两个命令进行安装
yum -y install vixie-cron
yum -y install crontabs

安装好了以后,可以通过以下命令开启、关闭定时任务,以及查看crontab的状态

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态

开启定时任务服务后 用这个命令 service crond status 来查看一下

可以看到已经启动了

2、编写定时任务需要执行的启动脚本

以下是我服务器上的一个服务的定时任务的脚本内容:仅供参考
#--------------------------------------------------------------------------------------
#查询wx_pay进程个数:wc -l 返回行数
count=`ps -ef | grep wx_pay-0.0.1-SNAPSHOT.jar | grep -v "grep" | wc -l`
#echo $count

sec=7
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
nowDate=`date +"%Y-%m-%d"`
#开始一个循环,以判断进程是否关闭
for var in 1 2
	do
     if [ $count -gt 0 ]; then
      #若进程还未关闭,则脚本sleep几秒
      echo sleep $sec second the $var time, the wx_pay_Thread is still alive
      sleep $sec
     else
      #若进程已经关闭,则重启,并出循环
	  cd /cj/wxpay
	  nohup java -jar wx_pay-0.0.1-SNAPSHOT.jar  > nohup.log 2&>wx_pay-$nowDate.log &
	  echo $nowtime" start wx_pay-0.0.1-SNAPSHOT.jar"
	  echo "ok! is success!"
	  echo ""
      break
     fi
    done
	
#--------------------------------------------------------------------------------------

3、把写的定时任务脚本加入crontab定时任务列表

输入命令:crontab -e

把定时任务脚本添加进去

#一分钟检查一次,然后把重新启动的日志追加至restart.log中

*/1 * * * * /cj/wxpay/wx_pay_restart.sh  >> /cj/wxpay/restart.log

4、配置好了以后可以看下效果

如果当前的服务进程没有挂掉,它会打印出

sleep 7 second the 1 time, the wx_pay_Thread is still alive

然后7秒以后会再次去尝试着看下进程是否存活,如果还是存活就打印出

sleep 7 second the 2 time, the wx_pay_Thread is still alive

然后进入下一次定时任务的轮询

然后咱们把对应的服务kill掉以后,来看一下它会不会自动重启

可以看到当前的服务已经被kill掉了,是没有启动的

一分钟左右(我设置的cron任务是一分钟执行一次)定时任务执行后,再看下。

可以看到定时任务执行后,打印出了启动成功!

再 ps 看一下对应的服务是否启动了,可以看到对应的服务已经启动了。

这样就实现了服务宕机挂掉后,自动检测并自动重启

发布了108 篇原创文章 · 获赞 103 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/ju_362204801/article/details/105414673