Crontab 快速上手

Crontab 是Unix 系統中基於時間的任務管理工具。php

這個命令與傳統的 Unix 命令不同,下面會一一介紹其規則及其用法。html

crontab 仍是 cron

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 有兩種方式:

  1. crontab -e:直接接受標準輸入(鍵盤)上鍵入的命令,並將它們載入crontab。
  2. crontab file:將file 做爲crontab 的任務列表文件並載入crontab

第一種方式沒什麼好說的,直接在終端添加 crontab 任務就好了,下面簡單說一下第二種(其實二者的核心都是同樣的)。

建立crontab 文件

首先建立一個文件,該文件的內容以功能描述執行時間執行任務 這幾部分組成。

其中,前二者並非必定須要,只是爲了方便本身往後或其餘人能快速知道這個任務具體是作什麼的,# 表示註釋。

示例,建立一個名稱爲script_cron 的crontab 文件:

# 每分鐘執行一次 script.php 腳本
* * * * * /usr/bin/php ~/script.php

運行crontab

爲了提交剛剛建立的crontab 文件,能夠把這個新建立的文件名稱做爲crontab命令的參數:

$ crontab script_cron

列出cron 服務

使用-l 參數列出crontab文件:

$ crontab -l
# 每分鐘執行一次 script.php 腳本
* * * * * /usr/bin/php ~/script.php

編輯cron 服務

$ crontab -e

刪除cron 服務

$ crontab -r

常見問題

crontab 沒有當即生效

新建立的cron 任務,不會立刻執行,至少要過兩分鐘才執行。

若是但願能立刻執行,能夠重啓 crontab 。

// Ubuntu:
$ service cron restart    

// Centos
$ service crond restart

crontab 壓根沒執行

有時候會遇到直接在命令行中能夠執行任務,可是定時任務卻怎麼都不執行,

這時首先須要確認 cron 服務是否正常:

// Ubuntu:
$ service cron status    

// Centos
$ service crond status

而後確認須要執行的任務是否包含路徑,若是包含請使用全局路徑。

最後重啓 cron 服務,一般到這裏就已經能夠正常執行了,若是還不行,嘗試引入環境變量:

0 * * * * . /etc/profile; /usr/bin/php /var/www/script.php

crontab 無權限執行

須要注意的是crontab 任務的調度,只有 root 和任務全部者擁有權限。

若是想要編輯/查看/刪除其餘用戶的任務,可使用如下命令:

$ crontab -u <username> <選項>

經常使用選項:
-e:編輯任務
-l:查看任務
-r:刪除任務

查看 crontab 任務執行狀況

當定時任務在指定時間執行時,會同步輸出相似日誌:

$ 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 日誌文件了。

參考連接

相關文章
相關標籤/搜索