linux终止mysql进程_Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法
前言
最近發(fā)現(xiàn)MySQL服務(wù)隔三差五就會(huì)掛掉,導(dǎo)致我的網(wǎng)站和爬蟲(chóng)都無(wú)法正常運(yùn)作。自己的網(wǎng)站是基于MySQL,在做爬蟲(chóng)存取一些資料的時(shí)候也是基于MySQL,數(shù)據(jù)量一大了,MySQL它就有點(diǎn)受不了了,時(shí)不時(shí)會(huì)崩掉,雖然我自己有網(wǎng)站監(jiān)控和郵件通知,但是好多時(shí)候還是需要我來(lái)手動(dòng)連接我的服務(wù)器重新啟動(dòng)一下我的MySQL,這樣簡(jiǎn)直太不友好了,所以,我就覺(jué)定自己寫(xiě)個(gè)腳本,定時(shí)監(jiān)控它,如果發(fā)現(xiàn)它掛掉了就重啟它。 好了,閑言碎語(yǔ)不多講,開(kāi)始我們的配置之旅。 運(yùn)行環(huán)境:Ubuntu Linux 14.04
編寫(xiě)Shell腳本
首先,我們要編寫(xiě)一個(gè)shell腳本,腳本主要執(zhí)行的邏輯如下: 顯示mysqld進(jìn)程狀態(tài),如果判斷進(jìn)程未在運(yùn)行,那么輸出日志到文件,然后啟動(dòng)mysql服務(wù),如果進(jìn)程在運(yùn)行,那么不執(zhí)行任何操作,可以選擇性輸出監(jiān)測(cè)結(jié)果。 可能大家對(duì)于shell腳本比較陌生,在這里推薦官方的shell腳本文檔來(lái)參考一下 Ubuntu Shell 編程基礎(chǔ) shell腳本的后綴為sh,在任何位置新建一個(gè)腳本文件,我選擇在 /etc/mysql 目錄下新建一個(gè) listen.sh 文件。 執(zhí)行如下命令:
1
2
3
cd /etc/mysql
touch listen.sh
vi listen.sh
進(jìn)入到vi中,我們添加如下腳本內(nèi)容:
1
2
3
4
5
6
7
8
9
#!/bin/bash
pgrep mysqld &> /dev/null
if [ $? -gt 0 ]
then
echo "`date` mysql is stop"
service mysql start
else
echo "`date` mysql running"
fi
其中 pgrep mysqld 是監(jiān)測(cè)mysqld服務(wù)的運(yùn)行狀態(tài),&> /dev/null 是將其結(jié)果輸出到空文件,也就是不保存輸出信息 $? 是拿到上一條命令的運(yùn)行結(jié)果,-gt 0 是判斷是否大于0,后面則是輸出時(shí)間到日志文件,然后啟動(dòng)mysql,否則不啟動(dòng)mysql 保存好了,那么我們執(zhí)行如下的命令,來(lái)測(cè)試一下。 貼心的命令文字版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@iZ28uogb3laZ:/etc/mysql# vi listen.sh
root@iZ28uogb3laZ:/etc/mysql# pgrep mysqld
3359
root@iZ28uogb3laZ:/etc/mysql# chmod 777 listen.sh
root@iZ28uogb3laZ:/etc/mysql# ./listen.sh
Sun Aug 16 16:44:58 CST 2015 mysql running
root@iZ28uogb3laZ:/etc/mysql# sudo service mysql stop
mysql stop/waiting
root@iZ28uogb3laZ:/etc/mysql# ./listen.sh
Sun Aug 16 16:45:17 CST 2015 mysql is stop
mysql start/running, process 4084
root@iZ28uogb3laZ:/etc/mysql# ./listen.sh
Sun Aug 16 16:45:24 CST 2015 mysql running
root@iZ28uogb3laZ:/etc/mysql#
嗯,編輯完了.sh文件之后,我們首先要對(duì)其進(jìn)行授權(quán),增加可執(zhí)行的權(quán)限。
1
sudo chmod 777 listen.sh
然后運(yùn)行腳本測(cè)試一下,顯示mysql正在運(yùn)行。把mysql關(guān)掉,運(yùn)行腳本,便會(huì)檢測(cè)到mysql已關(guān)閉,然后重新啟動(dòng)了mysql,再次運(yùn)行,便會(huì)發(fā)現(xiàn)mysql正常運(yùn)行了。 注:這里我比較納悶shell腳本中pgrep mysqld的返回結(jié)果是什么。為什么它大于0便代表mysql服務(wù)掛掉了呢?感覺(jué)邏輯有點(diǎn)是相反的,不過(guò)實(shí)測(cè)可用有效。如果大家明白為什么,非常希望您可以給我一個(gè)解釋。
修改日志輸出
好,接下來(lái)我們把輸出的內(nèi)容保存到日志里。修改腳本文件如下
1
2
3
4
5
6
7
8
9
#!/bin/bash
pgrep mysqld &> /dev/null
if [ $? -gt 0 ]
then
echo "`date` mysql is stop" >> /var/log/mysql_listen.log
service mysql start
else
echo "`date` mysql running" >> /var/log/mysql_listen.log
fi
這樣,每執(zhí)行一次腳本,輸出結(jié)果都會(huì)被保存到 /var/log/mysql_listen.log 中了。
添加定時(shí)任務(wù)
好了,腳本可以順利執(zhí)行了,那么我們就需要定時(shí)調(diào)用一下這個(gè)腳本來(lái)運(yùn)行了,我們需要用到 cron。 首先我們需要編輯一下corn調(diào)度表格,命令如下:
1
crontab -e
如果你是第一次編輯這個(gè),他會(huì)讓你選擇文件打開(kāi)方式,隨便選一個(gè)數(shù)字就好了。 比如我們用GNU打開(kāi)的,我們就在它的最后一行添加下面的一句話即可。 、 文字版本:
1
*/5 * * * * /etc/mysql/mysql_listen.sh
/5代表五分鐘執(zhí)行一次,后面的四個(gè)點(diǎn)依次代表了,小時(shí),日,月,星期。如果想要時(shí)間長(zhǎng)一些,比如一小時(shí)調(diào)度一次,那就設(shè)置一下后面第一個(gè)*就好了。 好,保存一下,重啟cron服務(wù)。
1
service cron restart
嗯,調(diào)度任務(wù)已經(jīng)添加進(jìn)去了,這樣,每五分鐘系統(tǒng)就會(huì)調(diào)用一下剛才寫(xiě)的那個(gè)腳本。 過(guò)一段時(shí)間,我們來(lái)看一下運(yùn)行效果,嗯,監(jiān)控跑的很順利吶。 文字版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sun Aug 16 15:39:12 CST 2015 mysql running
Sun Aug 16 15:40:01 CST 2015 mysql running
Sun Aug 16 15:45:02 CST 2015 mysql running
Sun Aug 16 15:50:01 CST 2015 mysql running
Sun Aug 16 15:55:01 CST 2015 mysql running
Sun Aug 16 16:00:01 CST 2015 mysql running
Sun Aug 16 16:05:01 CST 2015 mysql running
Sun Aug 16 16:10:01 CST 2015 mysql running
Sun Aug 16 16:15:01 CST 2015 mysql running
Sun Aug 16 16:20:01 CST 2015 mysql running
Sun Aug 16 16:25:01 CST 2015 mysql running
Sun Aug 16 16:30:01 CST 2015 mysql running
Sun Aug 16 16:35:01 CST 2015 mysql running
Sun Aug 16 16:40:01 CST 2015 mysql running
Sun Aug 16 16:51:04 CST 2015 mysql running
哈哈,是不是五分鐘監(jiān)測(cè)了一次呢?大功告成。
后記
這樣,我們就實(shí)現(xiàn)了五分鐘定時(shí)檢測(cè)MySQL進(jìn)程服務(wù),媽媽再也不用擔(dān)心我的網(wǎng)站會(huì)宕掉啦。 如有問(wèn)題,歡迎留言交流,謝謝啦。
總結(jié)
以上是生活随笔為你收集整理的linux终止mysql进程_Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 路由器被手机桥接如何关闭路由器如何关闭桥
- 下一篇: mysql数据库版本不同_mysql数据