買過一些阿里雲最便宜的ECS(幾百元/年,1GB記憶體,安裝Debian),使用Wordpress做小企業官網
然後隔一段時間就會出現網頁打不開,顯示 “建立資料庫連線時出錯”。原因是mysql當機了。
一般解決的方法:
- reboot
- service mysql start
- 網友提到的在wp_options表-修復表-執行,修改wp-config.php(實際都無效)
現在,就是要設定一個定時任務:每分鐘檢查一次mysql是否執行?如果沒有執行,則啟動。
crontab可以設定任務,定時執行某個指令碼——比如也可以定時執行一個PHP檔案;
如果沒有安裝crontab,可百度一下
step1 設定定時任務
定時任務程式碼
# 每隔 1 分鐘執行一次 test.sh
*/1 * * * * /var/www/test.sh
上述 五個星號 按順序依次代表:0-59分鐘,0-23小時,1-31某一天,1-12某個月,0-6 Sunday=0 or 7 星期幾
先別管test.sh是啥,路徑自定義
將上面程式碼新增到crontab檔案
方法1:修改root使用者檔案
開啟 /etc/crontab 檔案,新增上述程式碼,儲存即可
注意:需要root許可權
方法2:修改普通使用者檔案(建議)
直接ssh執行命令
crontab -e
會開啟 /var/spool/cron/crontabs/username檔案(如果沒有username,這個檔案還是root)
新增上述程式碼
按ctrl+X退出,提示是否儲存,按Y,回車,會有提示:
crontab: installing new crontab
本方法的好處:會檢查設定是否有錯誤
crontab 服務重啟
/etc/init.d/cron restart
或
service cron restart
也有說不需要重啟服務
step2 自定義任務
新建 /var/www/test.sh (我把許可權設定755),剛才的crontab設定就是每分鐘執行這個test.sh的
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
/etc/init.d/mysql start
else
echo "MySQL server is running ."
fi
注意,如果把 /etc/init.d/mysql start 啟動資料庫命令改為:service mysql start ,則可能因為許可權不夠無法執行
到這裡就設定好了
檢視執行情況(crontab執行日誌)
方法1:系統自帶
- 執行結果不論是否成功,都會在 /var/spool/mail/mail檔案中有crontab執行日誌的記錄
- 另外說在/var/log/cron.log有,我在Debian中沒找到
方法2:自定義日誌
新建 /var/www/mysql_start.log(我把許可權設定555)
把test.sh改成如下:
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
echo "At time: `date`: MySQL is stop .">> /var/www/mysql_start.log
/etc/init.d/mysql start
else
echo "MySQL server is running ."
fi
然後每分鐘的執行情況,都會寫入這個日誌檔案,