当服务器内存特别小,往往在网站访问量大的时候就会导致服务器的nginx进程过多,之后导致mysql服务被自动关闭。
所以,做了一个脚本,能够自动监控服务器mysql的状态,如果发现进程关闭就自动重启。
shell脚本如下:
#!/bin/bash
checkMysql(){
CMDCHECK=`lsof -i:3306 &>/dev/null`
Port="$?"
PIDCHECK=`ps aux|grep mysqld|grep -v grep`
PID="$?"
if [ "$Port" -eq "0" -a "$PID" -eq 0 ];then
return 200
else
return 500
fi
}
startMysql(){
/etc/init.d/mysql start
}
checkMysql
if [ $? == 200 ];then
echo "Mysql is running..."
else
startMysql
checkMysql
if [ $? != 200 ];then
while true
do
killall mysqld
[ $? != 0 ] && break
sleep 2
done
startMysql
fi
fi
直接复制过去,在服务器上建立一个mysql-listen.sh
的文件,
然后为这个文件添加可执行权限
chmod a+x mysql-listen.sh
然后先检查一下这个脚本是否可用,先关闭服务器的mysql
service mysql stop
然后访问你的网址,如果出现数据库连接失败说明数据已经关闭了,然后运行这个脚本
bash mysql-listen.sh
然后看是否有信息说明服务器已经正在运行mysql且提供一个进程号。
我在这个阶段出了错误,首先是没有改权限导致并有没有权限去启动mysql,其次启动mysql的命令在不同服务器上有时候是不一样的,有的是/etc/init.d/mysql start
部分的可能是systemctl start mysql
接下来需要让这个脚本隔一段时间自动运行。
使用crontab -e
在最后一行补上
*/5 * * * * bash /root/mysql-listen.sh
这里/5中的5 是指5分钟一次。 后面是4个代表小时,日,月,星期。最后是你脚本的路径。
保存后退出。
这样就会每隔5分钟,执行一次检测mysql的脚本。