生產環境下的服務器的Crontab寫法

http://hi.baidu.com/yuhongchun027/item/aac77b7ab5c5b13a714423e1


生產環境下的服務器的Crontab寫法

雖然關於 Crontab 的介紹到處都是,詳細讀了一遍這個詞條,收穫還是有的。Crontab 這個名字來自 “chronos”,一個古希臘語, “時間”的意思。
常見陷阱

每個System Admin或者是普通的 Unix 用戶,在第一次使用 Crontab 的時候都會遇到問題. 運行 Crontab 的常見錯誤包括如下幾種:1) 出於測試目的新創建了一條 Cron JOB, 時間間隔必須超過兩分鐘,否則 JOB 將調度不到。如果必須忽略這兩分鐘的載入配置時間差,可以通過重新啓動 Cron Daemon 做到。

2) 從 Crontab 中啓動 X Window 程序需要注意的事項:所以要麼在程序前初始化 “DISPLAY=:0.0″, 要麼在應用程序後面追加參數 –display :0.0

3) 命令中的 % 必須做轉義處理: \% .我個人的意見是不要在命令行裏帶這個參數,乾脆寫到腳本里,然後調度該腳本即可。

其實我倒是認爲使用 Crontab 最常見的一個問題往往是因爲環境變量不對。經常會看到論壇裏有人問:爲什麼我的 Crontab 創建了不執行? 準備創建一條 Cron JOB 的時候,很多人都喜歡在命令行下運行一遍,因爲這個時候環境變量是隨着 Shell 自動帶進來,在 Crontab 中則可能因爲找不到正確的環境變量,JOB 就不能執行。這個小問題就像出天花,一次教訓之後就都記得了。
必須使用的一則技巧

每條 JOB 執行完畢之後,系統會自動將輸出發送郵件給當前系統用戶。日積月累,非常的多,甚至會撐爆整個系統。所以每條 JOB 命令後面進行重定向處理是非常必要的: >>/dev/null 2>&1。前提是對 Job 中的命令需要正常輸出已經作了一定的處理, 比如追加到某個特定日誌文件。附: Crontab 的格式說明如下:

* 逗號(’,') 指定列表值。如: “1,3,4,7,8″
* 中橫線(’-') 指定範圍值 如 “1-6″, 代表 “1,2,3,4,5,6″
* 星號 (’*') 代表所有可能的值

Linux(開源系統似乎都可以)下還有個 “/” 可以用. 在 Minute 字段上,*/15 表示每 15 分鐘執行一次. 而這個特性在商業 Unix ,比如 AIX 上就沒有.

## Use the hash sign to prefix a comment
# +---------------- minute (0 - 59)
# | +------------- hour (0 - 23)
# | | +---------- day of month (1 - 31)
# | | | +------- month (1 - 12)
# | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed推薦記憶爲分 時 日 月 星期


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>&1
cron語句中還可以使用逗號(,)來指定多個時間。例如你想在每小時的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 文件

發佈了40 篇原創文章 · 獲贊 29 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章