Linux(Debian)使用crontab設定定時任務

小刀門門主發表於2019-01-23

買過一些阿里雲最便宜的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

然後每分鐘的執行情況,都會寫入這個日誌檔案,

相關文章