Crontab 是Unix 系統中基於時間的任務管理工具。php
這個命令與傳統的 Unix 命令不同,下面會一一介紹其規則及其用法。html
crontab 仍是 cron?初次接觸 crontab 的同窗可能會被這兩個詞給繞暈。linux
其實能夠這樣來理解:crontab
就是 cron
服務的命令行工具,而cron
則是背後處理crontab
投遞任務的服務。服務器
crontab 命令是以固定的時間格式來使用的,工具
表示意義 | 分鐘 | 小時 | 日期 | 月份 | 周 | 命令 |
---|---|---|---|---|---|---|
範圍 | 0~59(*) | 0~23(*) | 1~31(*) | 1~12(*) | 0~7(*) | 須要執行的命令 |
另外還有一些特殊字符具備特殊含義:spa
*
表示任什麼時候刻都接收。舉個栗子:* 12 * * *
表示不論何月、何日的星期幾的十二點都執行指定命令。
每分鐘執行一次:命令行
*/1 * * * * 或者 * * * * *
每五分鐘執行一次:nuxt
*/5 * * * *
每小時執行一次:rest
0 * * * * 或者 0 */1 * * *
天天執行一次:日誌
0 0 * * *
每週執行一次:
0 0 * * 0
每個月執行一次:
0 0 1 * 0
初次接觸crontab
命令時,我也比較納悶,這個命令倒底是如何使用的?
使用 crontab 有兩種方式:
第一種方式沒什麼好說的,直接在終端添加 crontab 任務就好了,下面簡單說一下第二種(其實二者的核心都是同樣的)。
首先建立一個文件,該文件的內容以功能描述、執行時間、執行任務 這幾部分組成。
其中,前二者並非必定須要,只是爲了方便本身往後或其餘人能快速知道這個任務具體是作什麼的,#
表示註釋。
示例,建立一個名稱爲script_cron
的crontab 文件:
# 每分鐘執行一次 script.php 腳本 * * * * * /usr/bin/php ~/script.php
爲了提交剛剛建立的crontab 文件,能夠把這個新建立的文件名稱做爲crontab
命令的參數:
$ crontab script_cron
使用-l
參數列出crontab文件:
$ crontab -l # 每分鐘執行一次 script.php 腳本 * * * * * /usr/bin/php ~/script.php
$ crontab -e
$ crontab -r
新建立的cron 任務,不會立刻執行,至少要過兩分鐘才執行。
若是但願能立刻執行,能夠重啓 crontab 。
// Ubuntu: $ service cron restart // Centos $ service crond restart
有時候會遇到直接在命令行中能夠執行任務,可是定時任務卻怎麼都不執行,
這時首先須要確認 cron 服務是否正常:
// Ubuntu: $ service cron status // Centos $ service crond status
而後確認須要執行的任務是否包含路徑,若是包含請使用全局路徑。
最後重啓 cron 服務,一般到這裏就已經能夠正常執行了,若是還不行,嘗試引入環境變量:
0 * * * * . /etc/profile; /usr/bin/php /var/www/script.php
須要注意的是crontab 任務的調度,只有 root 和任務全部者擁有權限。
若是想要編輯/查看/刪除其餘用戶的任務,可使用如下命令:
$ crontab -u <username> <選項>
經常使用選項:-e
:編輯任務-l
:查看任務-r
:刪除任務
當定時任務在指定時間執行時,會同步輸出相似日誌:
$ tail -f /var/log/syslog Nov 19 12:47:01 gigabit CRON[14521]: (root) CMD (/usr/bin/php /var/www/script.php)
此時就能夠確定任務調度正常。
上面那種方式確實有效,可是並不方便,那麼有沒有更好的方式呢?
crontab 默認沒有任務的執行記錄日誌,可是能夠經過其餘方式手動建立日誌文件。
0 * * * * . /etc/profile; /usr/bin/php /var/www/script.php >> /var/log/cron.log 2>&1
在script.php
腳本最後面增長一次輸出,這樣每次執行完腳本就會將輸出重定向至cron.log
日誌文件了。