Crontab是一個Unix/Linux系統下的常用的定時執行工具,可以在無需人工幹預的情況下運行指定作業。很多時候我們都要用到Crontab指令,例如在Let’s Encrypt Wildcard 免費泛域名SSL憑證中提到了acme.sh 腳本就是利用了Crontab定時任務的形式來更新SSL憑證。

透過crontab指令,我們可以在固定的間隔時間執行指定的系統指令或shell script腳本,在Linux VPS掛載Google Drive和Dropbox中就可以用Crontab指令實現定時同步備份,用Crontab實現每天定時重啟VPS、伺服器或是Nginx、PHP、MysqL服務等。

總之,掌握基本的Crontab指令語法對於我們管理自己的VPS主機是非常必要的,本篇文章透過實例來講解如何使用Linux Crontab指令,不作深入的探究,主要是方便日後的快速查詢與參考。

Linux Crontab指令定時任務基本語法與操作教學-VPS/伺服器自動化操作

更多關於VPS主機有關的指令使用方法與應用,可以看看:

  1. Linux系統監控指令整理總表-掌握CPU,記憶體,磁碟IO等找出效能瓶頸
  2. 三個命令工具Rsync,SCP,Tar-快速解決VPS遠端網站搬家與資料同步
  3. Linux共享資料夾目錄三種方法-NFS遠端掛載,GlusterFS共享儲存和samba共享目錄

一、Crontab查看編輯重啟

1.查看crontab定時執行任務列表

crontab -l

2.編輯crontab定時執行任務

crontab -e

3.刪除crontab定時任務

crontab -r

4、相關指令:

sudo service crond start     #启动服务
sudo service crond stop      #关闭服务
sudo service crond restart   #重启服务
sudo service crond reload    #重新载入配置
sudo service crond status    #查看服务状态

二、Crontab基本格式語法

crontab 的時間表達式:

基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令

先來看一個例子。每天凌晨1:00執行備份程式:0 1 * * * /root/wzfou.com/backup.sh 。其中/root/wzfou.com/backup.sh 這是腳本路徑,要使用絕對路徑,前面的日期格式請直接看下圖就知道了。

實例1:每1分鐘執行一次

* * * * * /root/wzfou.com/backup.sh

實例2:每小時的第3和第15分鐘執行一次

3,15 * * * * /root/wzfou.com/backup.sh

實例3:每天的8點到11點的第3和第15分鐘執行一次

3,15 8-11 * * * /root/wzfou.com/backup.sh

實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行一次

3,15 8-11 */2  *  * /root/wzfou.com/backup.sh

實例5:每週一上午8點到11點的第3和第15分鐘執行一次

3,15 8-11 * * 1 /root/wzfou.com/backup.sh

實例6:每晚的21:30執行一次

30 21 * * * /root/wzfou.com/backup.sh

實例7:每月1、10、22日的4 : 45執行一次

45 4 1,10,22 * * /root/wzfou.com/backup.sh

實例8:每週六、週日的1 : 10執行一次

10 1 * * 6,0 /root/wzfou.com/backup.sh

實例9:每天18 : 00至23 : 00之間每隔30分鐘執行一次

0,30 18-23 * * * /root/wzfou.com/backup.sh

實例10:每星期六的晚上23: 00 pm執行一次

0 23 * * 6 /root/wzfou.com/backup.sh

實例11:每一小時執行一次

* */1 * * * /root/wzfou.com/backup.sh

實例12:每天晚上23點到第二天7點之間,每隔一小時執行一次

* 23-7/1 * * * /root/wzfou.com/backup.sh

實例13: 每個星期的第一天執行一次(即每個星期天晚上24:00開始執行).

@weekly /root/wzfou.com/backup.sh

實例14:每個月的15日執行一次.

0 11 15 * * /root/wzfou.com/backup.sh

實例15:每個月的第一天執行一次(即每個月的1日凌晨0點開始執行).

@monthly /root/wzfou.com/backup.sh

實例16: 在指定的月份執行一次(在1月,4月和 6月每天晚上0點執行一次).

0 0 * jan,apr,jun * /root/wzfou.com/backup.sh

實例17: 重啟後執行一次.

@reboot /root/wzfou.com/backup.sh

實例18:定時任務執行後寄一封電子郵件通知.

MAILTO="raj"
1 1 * * * /root/wzfou.com/backup.sh

實例19:指定shell (預設的是/bin/bash)

SHELL=/bin/sh
1 1 * * * /root/wzfou.com/backup.sh

實例20:指定環境變數.

PATH=/sbin:/bin:/usr/sbin:/usr/bin 
1 1 * * * /root/wzfou.com/backup.sh

四、Crontab可能存在的問題

4.1  Crontab不立即生效

大家新建的Crontab定時任務保存後需要等待2分鐘後才會執行,當然如果想要立即執行可以重新啟動Crontab。當crontab失效時,可以嘗試/etc/init.d/crond restart解決問題,或是查看日誌看某個任務有沒有執行/錯誤tail -f /var/log/cron。

4.2  Crontab不執行

腳本中涉及檔案路徑時寫入全域路徑,更新系統時間時區後需要重新啟動cron。當手動執行腳本OK,但是crontab死活不執行時很有可能是環境變量,可嘗試在crontab中直接引入環境變量解決問題,例如:

0 * * * * . /etc/profile;/bin/sh /root/wzfou.com/backup.sh

4.3  Crontab無權限執行

要注意系統級任務調度與使用者級任務調度。只有root 使用者和crontab 檔案的擁有者可以在-e-l-r-v 標誌後面使用UserName 以編輯、列出、除去或驗證指定使用者的crontab 檔案。

root使用者的任務調度操作可以透過”crontab –uroot –e」來設置,也可以將調度任務直接寫入/etc/crontab檔案。

想編輯別的使用者的 crontab, 使用root執行下面的指令,同一個格式 (追加 “-u username” 到指令後) 也可以用來列出或刪除 crontabs。

 crontab -u username -e

4.4  Crontab執行後通知

當Crontab定時任務在你所指定的時間執行後,系統會寄一封信給你,顯示該程式執行的內容,可以在日誌中/var/log/cron看到。若是你不希望收到這樣的通知,請在每一行空一格之後加上 > /dev/null 2>&1 即可。

發表評論