定时检测 MySQL 进程在意外退出时自动重启
之前使用小内存 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. 到此设置完成。