cron的用法老是記不住,索性寫(xiě)下來(lái)備忘。下文內容大部分是根據《Cron Help Guide》翻譯而來(lái),有些部分是自己加上的。
全文如下:
cron來(lái)源于希臘單詞chronos(意為“時(shí)間”),是linux系統下一個(gè)自動(dòng)執行指定任務(wù)的程序。例如,你想在每晚睡覺(jué)期間創(chuàng )建某些文件或文件夾的備份,就可以用cron來(lái)自動(dòng)執行。
cron服務(wù)是linux的內置服務(wù),但它不會(huì )開(kāi)機自動(dòng)啟動(dòng)??梢杂靡韵旅顔?dòng)和停止服務(wù):
/sbin/service crond start/sbin/service crond stop/sbin/service crond restart/sbin/service crond reload
以上1-4行分別為啟動(dòng)、停止、重啟服務(wù)和重新加載配置。
要把cron設為在開(kāi)機的時(shí)候自動(dòng)啟動(dòng),在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可。
cron把命令行保存在crontab(cron table)文件里,這個(gè)文件通常在 /etc 目錄下。每個(gè)系統用戶(hù)都可以有自己的crontab(在 /var/spool/cron/ 下)。要查看當前用戶(hù)的crontab,輸入 crontab -l;要編輯crontab,輸入 crontab -e;要刪除crontab,輸入 crontab -r。如當前是root身份,要查看/編輯/刪除/某用戶(hù)的crontab,只需在相應的命令后加上 -u USERNAME(如 crontab -e -u USERNAME)即可。crontab文件的默認編輯器是vi,可以輸入 export VISUAL=’editor’ 更改默認編輯器。
cron服務(wù)每分鐘不僅要讀一次 /var/spool/cron 目錄內的所有文件,還需要讀一次 /etc/crontab 文件。配置這個(gè)文件也能讓cron執行任務(wù)。使用crontab命令是對用戶(hù)級任務(wù)的配置,而編輯 /etc/crontab 文件是對系統級任務(wù)的配置。
以下是兩個(gè)cron語(yǔ)句的例子(在 /etc/crontab 文件里)。前者用來(lái)晚間備份 /etc 目錄,后者運行Analog程序處理服務(wù)器的統計信息。
12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&152 5 * * * root /usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1
以下是cron語(yǔ)句中的字段與字段說(shuō)明:
| 字段 | 說(shuō)明 |
| 1 | 分鐘(0-59) |
| 2 | 小時(shí)(2-24) |
| 3 | 日期(1-31) |
| 4 | 月份(1-12;或英文縮寫(xiě)Jan、Feb等) |
| 5 | 周幾(0-6,0為周日;或單詞縮寫(xiě)Sun、Mon等) |
| 6 | 用戶(hù)名(執行命令時(shí)以此用戶(hù)的身份) |
| 7 | 要執行的命令(路徑) |
現在來(lái)看第一行:
12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
這條語(yǔ)句將在每天的凌晨3點(diǎn)12分(03:12)運行 tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。>> /dev/null 2>&1 表示把所有標準輸出發(fā)送到 /dev/null(linux的回收站),把標準錯誤輸出(2)發(fā)送到和標準輸出(1)同樣的地方(即 /dev/null)。運行這行命令將不會(huì )產(chǎn)生任何輸出。
這條語(yǔ)句可以變得稍微復雜一點(diǎn):
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 命令。
以下語(yǔ)句可以達到同樣的效果:
30 15 13 Jun Mon * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
如果你想以用戶(hù)joey的身份每小時(shí)的第15分鐘運行某個(gè)程序,可以使用:
15 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1
其中的星號(*)是通配符,表示cron將忽略這個(gè)字段。
如果你想每?jì)尚r(shí)就運行某個(gè)程序,可以在小時(shí)字段里使用 */2。它將會(huì )在2點(diǎn),4點(diǎn),6點(diǎn)……22點(diǎn),24點(diǎn)運行。具體語(yǔ)句如下:
0 */2 * * * joey /usr/bin/somecommand >> /dev/null 2>&1
cron語(yǔ)句中還可以使用逗號(,)來(lái)指定多個(gè)時(shí)間。例如你想在每小時(shí)的15分和30分運行某個(gè)程序,可以在分鐘字段使用 15,30:
15,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1
如果你想在每月的第一周(即1號到7號)每天的指定時(shí)間運行某個(gè)程序,可以在日期字段使用 1-7:
15,30 */2 1-7 * * joey /usr/bin/somecommand >> /dev/null 2>&1
這條語(yǔ)句將在每月的第1-7日每?jì)尚r(shí)的15分和30分(02:15,02:30……22: 15,22:30等)運行 /usr/bin/somecommand 命令。
如果你想在每天的16:18執行一個(gè)腳本集合,可以把所有要執行的腳本放到一個(gè)目錄中(如 /home/username/cron),可以使用:
18 16 * * * root run-parts /home/username/cron >> /dev/null 2>&1
如果你想保存某個(gè)程序的輸出結果, 可以把 >> /dev/null 2>&1 替換為 >> /home/user/somecommand.log 2>&1 。
聯(lián)系客服