- 1. 同事跑了一个 php 的抓取, 这个会导致非常高的 sleep 值, 大概到好几千的水平. 进而 mysql 会 down 掉.
写了个 crontab
#crontab -e
[php]
* */1 * * * /sh/detect_php.sh
* */1 * * * /sh/detect_php.sh
detech_php 的内容
[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
脚本解释, 这个脚本非常简单的. 就是判断 mysql 进程是否为 0, 如果为 0, 那么就去杀掉 php, 然后重启 mysql. 并且写入一个日志.restart_php_mysql.sh 的内容
[php]
#!/bin/sh
killall -9 php
service mysql restart
#!/bin/sh
killall -9 php
service mysql restart
pkill 会导致脚本在杀完进程后直接 terminated. 所以这里不使用 pkill.