定时检测 MySQL 进程在意外退出时自动重启

Eric 资讯 270 次浏览 抢沙发

之前使用小内存 VPS 建站遇到的问题,隔三岔五出现 Error establishing a database connection。查询 MySQL 进程老是意外退出,于是写了个简单监控脚本,在出现问题时自动重新启动 MySQL 服务。

脚本使用方法:

1. 新建脚本文件,假设放在 root 用户目录下。

vi /root/mysqld_listen.sh

2. 复制下面 Shell 脚本内容保存。

#!/usr/bin/env bash

pgrep mysqld > /dev/null 2>&1
if [ $? -gt 0 ]
then
   systemctl start mariadb.service
   date +"%Y-%m-%d %T: mysqld process is not running." >> /var/log/mysqld_listen.log
fi

解释下工作原理:

  • 先用 pgrep 命令查询 mysqld 进程是否在运行列队,并将输出重定向到 /dev/null 丢弃;
  • 判断上个命令运行退出状态码是否大于 0(大于则表示查询不到进程);
  • 如果找不到进程,就启动 MySQL 服务(这里用的 MariaDB 命令),并记录故障时间到日志文件;

3. 赋予脚本可执行权限。

chmod +x /root/mysqld_listen.sh

4. 运行 crontab -e 命令添加定时任务。例如设置每隔 5 分钟检查。

*/5 * * * * /root/mysqld_listen.sh

5. 到此设置完成。

发表评论

电邮地址用于 Gravatar 头像显示,不会被公开可见。