监控mysql服务是否正常启动,如果未正常启动,就启动mysql服务。
过滤mysql端口3306进行判断。具体脚本如下:
#!/bin/bash #这里的思路不是最佳的 port=`netstat -lnt | grep 3306 | awk -F '[: ]+' '{print $5}'` #不要使用整数进行比较,因为一旦端口不存在,比较就会报错 if [ "$port" != "3306" ];then #/data/3306/mysql start service mysql start else echo "mysql running!!!" fi思考:该脚本的好处和局限是什么?
(1)、获取到端口过程比较太复杂,不是好方法。
(2)、不要使用数字进行比较的方式,而是使用字符串比较的方式。
思路:如果mysql端口和进程同时存在,即认为mysql服务正常
#!/bin/bash #通过将端口转换为函数,即端口个数,方便做判断 port=`netstat -lnt | grep 3306 | wc -l` #通过吧进程转换为行数,即进程个数,方便做判断 pid=`ps -ef | grep mysql | grep -v grep | wc -l` [ $port -ne 1 ] && [ $pid -ne 2 ] && { #/data/3306/mysql start service mysql start } echo "mysql running!!!"改进:
#!/bin/bash port=`netstat -lnt | grep 3306 | wc -l` pid=`ps -ef | grep mysql | grep -v grep | wc -l` if [ $port -ne 1 ] && [ $pid -ne 2 ];then #/data/3306/mysql start service mysql start else echo "mysql running!!!"思路:模拟web服务器,通过mysql账户连接mysql,然后根据返回命令状态或返回内容确认mysql是否正常(推荐)
#!/bin/bash mysql -uroot -p123456 -e "select version();" &>/dev/null if [ $? -ne 0 ];then #/data/3306/mysql start service mysql start else echo "mysql running!!!" fi