我們建站初期都會(huì)選擇一臺(tái)小內(nèi)存的 VPS 服務(wù)器,這樣降低建站初期的成本,再說初期訪問量很小沒有必要使用高配服務(wù)器,但是使用過程中不知道是不是內(nèi)存不夠的原因,MySQL 數(shù)據(jù)庫服務(wù)總是會(huì)自動(dòng)停止,就是說數(shù)據(jù)庫都宕機(jī)了。那么有沒有什么辦法在 Linux 上定時(shí)檢測 MySQL 服務(wù)是否宕機(jī),并自動(dòng)重啟服務(wù) Linux 上定時(shí)檢測 MySQL 服務(wù)是否宕機(jī),并自動(dòng)重啟服務(wù)呢?本文分享個(gè)基于 Shell 腳本和 crontab 命令的定時(shí)檢測 MySQL 服務(wù)是否宕機(jī),并自動(dòng)重啟服務(wù)的方案,如果你也遇到了這種問題,可是嘗試用這種解決辦法。
一、檢測 MySQL 服務(wù)腳本
MySQL 自動(dòng)重啟的 Shell 腳本非常簡單,整個(gè)邏輯就是檢測是否有 MySQL 的進(jìn)程,如果沒有就重啟并記錄到日志文件中:
pgrep mysqld &> /dev/null if [ $? -gt 0 ] then lnmp restart echo "MySQL stopped at time: `date` " >> /root/log/mysql_listen.log fi
二、定時(shí)任務(wù)
定時(shí)檢測的功能就是通過 crontab 實(shí)現(xiàn)的,具體的介紹可以參考:《Linux 利用 crontab 實(shí)現(xiàn)定時(shí)任務(wù)格式與用法簡介》
例如我這里設(shè)置的是每 5 分鐘檢查一次 MySQL 服務(wù):
*/5 * * * * /root/mysql.sh > /dev/null 2>&1 &
三、更多腳本
除了檢測 MySQL 服務(wù)外,相應(yīng)的還可以檢測 PHP 服務(wù)、Nginx 服務(wù)等,在腳本上略微改動(dòng)下就好了:
pgrep mysqld &> /dev/null if [ $? -gt 0 ] then lnmp restart echo "MySQL stopped at time: `date` " >> /root/log/mysql_listen.log fi pgrep nginx &> /dev/null if [ $? -gt 0 ] then lnmp restart echo "Nginx stopped at time: `date` " >> /root/log/mysql_listen.log fi pgrep php-fpm &> /dev/null if [ $? -gt 0 ] then lnmp restart echo "Php stopped at time: `date` " >> /root/log/mysql_listen.log fi
這樣再也不要擔(dān)心數(shù)據(jù)庫莫名其妙宕機(jī)了,使用上述代碼 Linux 會(huì)定時(shí)檢測 MySQL 數(shù)據(jù)庫服務(wù)是否宕機(jī),如果出現(xiàn)數(shù)據(jù)庫宕機(jī)則自動(dòng)重啟數(shù)據(jù)庫服務(wù)。