最近服务器老是挂掉,重启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/nullfi #httpd ps -ef | grep httpd |grep -v grep > /dev/null if [ $? != 0 ];then service httpd restart > /dev/nullfi
上面蓝色的代码就是一组判断和执行命令的代码,你可以复制以后,修改为任何想要检查的服务相关的命令,比如mysql等。
shell脚本的功能强大,除了这种简单的处理之外,还可以通过复杂的编程,来实现一些比较复杂的定时任务。
2016-08-25 8675