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

買過一些阿里雲最便宜的ECS(幾百元/年,1GB內存,安裝Debian),使用Wordpress作小企業官網php

而後隔一段時間就會出現網頁打不開,顯示 「創建數據庫鏈接時出錯」。緣由是mysql宕機了。mysql

通常解決的方法:sql

  • 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是啥,路徑自定義bash

將上面代碼添加到crontab文件

方法1:修改root用戶文件

打開 /etc/crontab 文件,添加上述代碼,保存便可ssh

注意:須要root權限

方法2:修改普通用戶文件(建議)

直接ssh執行命令阿里雲

crontab -e

會打開 /var/spool/cron/crontabs/username文件(若是沒有username,這個文件仍是root)rest

添加上述代碼日誌

按ctrl+X退出,提示是否保存,按Y,回車,會有提示:code

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

而後每分鐘的執行狀況,都會寫入這個日誌文件,

相關文章
相關標籤/搜索