1. A colleague ran a php crawl, which will lead to a very high sleep value, probably to the level of several thousand. Then mysql will go down.
Write a crontab
#crontab -e
[php]
* */1 * * * /sh/detect_php.sh
* */1 * * * /sh/detect_php.sh
detech_php content
[php]
#!/bin/bash
host_dir=`cd /sh`
proc_name="mysql"
bug_time=`date -R`
pid=0
proc_num()
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
Return $num
}
proc_id()
{
pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}
proc_num
number=$?
if [ $number -eq 0 ]
then
./restart_php_mysql.sh
proc_id
echo " Kill the php and new mysql pid is : ${pid} : ${bug_time} " >> php_mysql.log 2>&1
else
proc_id
echo " The mysql is working , ${bug_time} " >> php_mysql.log 2>&1
echo "it's ok!"
fi
#!/bin/bash
host_dir=`cd /sh`
proc_name="mysql"
bug_time=`date -R`
pid=0
proc_num()
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
return $num
}
proc_id()
{
pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}
proc_num
number=$?
if [ $number -eq 0 ]
then
./restart_php_mysql.sh
proc_id
echo " Kill the php and new mysql pid is : ${pid} : ${bug_time} " >> php_mysql.log 2>&1
else
proc_id
echo " The mysql is working , ${bug_time} " >> php_mysql.log 2>&1
echo "it's ok!"
fi
Script explanation, this script is very simple. It is to determine whether the mysql process is 0. If it is 0, then kill php, then restart mysql. And write a log.
Contents of restart_php_mysql.sh
[php]
#!/bin/sh
killall -9 php
service mysql restart
#!/bin/sh
killall -9 php
service mysql restart
pkill will cause the script to be terminated directly after killing the process. So pkill is not used here.