Linux自动重启nginx httpd

最近服务器老是挂掉,重启nginx httpd之后恢复正常,实在琢磨不出来,到底问题出现在哪里,所以只能重启来解决先。今天突然想,是不是可以通过服务器的定时任务,自己检测服务是否正常,如果不正常就重启一下。说干就干,自己写一个.sh文件来执行。

Linux定时任务

在Linux中,我们使用crontab来定时执行某些任务。在《linux计划任务crontab使用方法》一文中我已经详细讲了crontab的用法,就不再赘述如何创建定时任务。

我们这次要判断服务是否正常,通过判断来决定是否重启服务,所以只能通过shell脚步来执行命令,在计划任务中加入这个shell脚本。

vi /opt/autorestart.sh ##下面一部分会讲解写什么内容
chmod 755 /opt/autorestart.sh ##可执行权限
crontab -e

在crontabs中增加一个计划任务:

*/10 * * * * /opt/autorestart.sh

每隔10分钟执行一次autorestart.sh脚本。

crontab reload

重载一下服务。

shell脚本内容

我们在shell脚本中对服务进行判断,如果nginx或者httpd宕机了,就执行一条重启命令:

#!/bin/bash
#nginx
ps -ef | grep nginx |grep -v grep > /dev/null
if [ $? != 0 ]
then
       service nginx restart > /dev/null
fi
#httpd
ps -ef | grep httpd |grep -v grep > /dev/null
if [ $? != 0 ]
then
       service httpd restart > /dev/null
fi

上面蓝色的代码就是一组判断和执行命令的代码,你可以复制以后,修改为任何想要检查的服务相关的命令,比如mysql等。

shell脚本的功能强大,除了这种简单的处理之外,还可以通过复杂的编程,来实现一些比较复杂的定时任务。

2016-08-25