利用 Crontab 自动检测 MySQL 状态并重启的脚本

很多朋友从虚拟机转到 VPS 或独立主机基本上都会碰到内存不足,然后系统自动将 MySQL 进程关闭的情况。上次已经说过,一个是做系统优化,调整 php、MySQL 的配置文件。另外一个是加载 swap 分区文件。那么如果这些都做了,那么 MySQL 被 Kill 的情况就大大减少了,不过如果你还是不放心的话,可以再加一个无人值守的自动检测 MySQL 的脚本。MySQL 异常关闭,网页中一般会显示 500 Internal Service Error ,或者是 连接数据库错误。 一般手动重启 MySQL 即可。不过这是一个人工操作,最近学习了 Linux 的定时任务 crontab,正好做一个自动化的操作。主要功能就是定时检查 MySQL,如果 MySQL 关闭了,就重启该服务。

系统环境:我的服务器 VPS,系统安装的是 CentOS 7 , LNMP 安装包自动安装的 Nginx、PHP、MySQL。

1. 用 putty 连接 ssh 后进入 VPS

2. 下载检测脚本

1
wget http://www.hostusvps.com/script/mysql_check.sh

或者你自己做一个脚本然后上传到服务器上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
pgrep -x mysqld &> /dev/null
 
if [ $? -ne 0 ]
 
then
 
echo "At time: `date` :MySQL  is stop .">> /home/wwwlogs/mysql_messages
 
service mysql start
#echo "At time: `date` :MySQL server is stop."
 
else
 
echo "MySQL server is running ."
 
fi

3. 加载计划任务

1
crontab -e

此时会进入 vi 模式,关于 vi 命令,大家自己查下吧,命令有点多。这里如果不会用的话,我就多说几句。
按 Insert 进入插入模式,然后就可以敲打命令了。打完命令后按 ESC ,然后键入 :wq 就可以保存退出。

键入命令:

1
*/3 * * * * /bin/bash /root/mysql_check.sh

注意:这个mysql_check.sh的路径取决于你自己到底把这个检查文件放哪了。

另外再说一下吧,如果实在不会 vi 命令,那么 crontab 的路径是在 /var/spool/cron/ 里,自己在本地写完然后上传上去也可以。

附 crontab 两个常用命令:

重启:
service cron start 启动cron服务
service cron restart 重启cron服务

列出某个用户cron服务的详细内容:
crontab -l