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