關於cron和crond,crontab以及bash腳本的寫法等知識 cron的語法用法

關於cron和crond,crontab以及bash腳本的寫法等知識 cron的語法用法

原文:http://hlee.javaeye.com/blog/379801

當你的cronjob死活不運行時或者你在日誌裏看到
錯誤信息" (*system*) BAD FILE MODE (/etc/crontab)"是指/etc/crontab文件的權限設置錯誤。
請執行命令:chmod 0600 /etc/crontab
再重啓cron daemon就可以了。/sbin/service crond restart

通常說權限不只是cronjob的腳本里的權限,也要檢查例如:誰的cron,和/var/spool/cron/ 或者 /etc/crontab是否有權限。

cron的用法老是記不住,索性寫下來備忘。下文內容大部分是根據《Cron Help Guide》 翻譯而來,有些部分是自己加上的。

全文如下:
    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 文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章