Crontab用法說明

版主: stnet253

回覆文章
tony
文章: 585
註冊時間: 2012-02-26, 07:04
聯繫:

Crontab用法說明

未閱讀文章 tony »

轉載:HTTP://nosleepman.pdx.cn/blog/diary,917912.html

cron來源於希臘單詞chronos(意為「時間」),是linux系統下一個自動執行指定任務的程式。例如,你想在每晚睡覺期間創建某些檔或資料夾的備份,就可以用cron來自動執行。服務的啟動和停止cron服務是linux的內置服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:

/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
以上1-4行分別為啟動、停止、重啟服務和重新載入配置。

要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可。

查看、編輯和刪除cron把命令列保存在crontab(cron table)檔裡,這個檔通常在 /etc 目錄下。每個系統使用者都可以有自己的crontab(在 /var/spool/cron/ 下)。

要查看當前使用者的crontab,輸入 crontab -l;
要編輯crontab,輸入 crontab -e;
要刪除crontab,輸入 crontab -r。

如當前是root身份,要查看/編輯/刪除/某使用者的crontab,只需在相應的命令後加上 -u USERNAME(如 crontab -e -u USERNAME)即可。

crontab檔的預設編輯器是vi,可以輸入 export VISUAL=\'editor\' 更改預設編輯器。

cron服務每分鐘不僅要讀一次 /var/spool/cron 目錄內的所有檔,還需要讀一次 /etc/crontab 檔。配置這個檔也能讓cron執行任務。使用crontab命令是對使用者級任務的配置,而編輯 /etc/crontab 檔是對系統級任務的配置。

語法說明

以下是兩個cron語句的例子(在 /etc/crontab 檔裡)。前者用來晚間備份 /etc 目錄,後者運行Analog程式處理伺服器的統計資訊。
12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
52 5 * * * root /usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1

以下是cron語句中的欄位與欄位說明:


欄位說明

1分鐘(0-59)
2小時(2-24)
3日期(1-31)
4月份(1-12;或英文縮寫Jan、Feb等)
5周幾(0-6,0為周日;或單詞縮寫Sun、Mon等)
6使用者名(執行命令時以此使用者的身份)
7要執行的命令(路徑)

現在來看第一行:12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
這條語句將在每天的淩晨3點12分(03:12)運行

tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。>> /dev/null 2>&1
表示把所有標準輸出發送到 /dev/null(linux的回收站),把標準錯誤輸出(2)發送到和標準輸出(1)同樣的地方(即 /dev/null)。運行這行命令將不會產生任何輸出。
這條語句可以變得稍微複雜一點:
30 15 13 6 1 * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
它將在6月13日週一的15:30運行 tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。

以下語句可以達到同樣的效果:30 15 13 Jun Mon * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1

如果你想以使用者joey的身份每小時的第15分鐘運行某個程式,可以使用:
15 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1
其中的星號(*)是萬用字元,表示cron將忽略這個欄位。
如果你想每兩小時就運行某個程式,可以在小時欄位裡使用 */2。
它將會在2點,4點,6點......22點,24點運行。
具體語句如下:0 */2 * * * joey /usr/bin/somecommand >> /dev/null 2>&1cron

語句中還可以使用逗號(,)來指定多個時間。
例如你想在每小時的15分和30分運行某個程式,可以在分鐘欄位使用
15,30:15,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1

如果你想在每月的第一周(即1號到7號)每天的指定時間運行某個程式,可以在日期欄位使用 1-7:15,30 */2 1-7 * * joey /usr/bin/somecommand >> /dev/null 2>&1
這條語句將在每月的第1-7日每兩小時的15分和30分(02:15,02:30......22: 15,22:30等)運行 /usr/bin/somecommand 命令。

如果你想在每天的16:18執行一個腳本集合,可以把所有要執行的腳本放到一個目錄中(如 /home/username/cron),可以使用:
18 16 * * * root run-parts /home/username/cron >> /dev/null 2>&1

如果你想保存某個程式的輸出結果, 可以把 >> /dev/null 2>&1 替換為 >> /home/user/somecommand.log 2>&1 。

總結

查看當前使用者的cron配置,使用 crontab -l
編輯當前使用者的cron配置,使用 crontab -e
刪除當前使用者的cron配置,使用 crontab -r
以root身份查看/編輯/刪除某使用者的cron配置,在命令後加上 -u USERNAME 配置系統級的任務,編輯 /etc/crontab 檔
回覆文章

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 3 位訪客