1.crontab命令選項:
-u指定一個用戶,
-l列出某個用戶的任務計劃,
-r刪除某個用戶的任務,
-e編輯某個用戶的任務
2.cron配置文件(文件位置:/etc/crontab)語法:
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范圍,0表示周日一般一行對應一個任務)
3.記住幾個特殊符號的含義:
“*”代表取值范圍內的數字,
“/”代表”每”,
“-”代表從某個數字到某個數字,
“,”分開幾個離散的數字
4.配置文件的寫法
可以使用crontab -e命令來編輯,也可以直接修改/etc/crontab文件
具體格式如下:
Minute Hour Day Month Dayofweek command
分鐘 小時 天 月 天每星期 命令
每個字段代表的含義如下:
Minute 每個小時的第幾分鐘執行該任務
Hour 每天的第幾個小時執行該任務
Day 每月的第幾天執行該任務
Month 每年的第幾個月執行該任務
DayOfWeek 每周的第幾天執行該任務
Command 指定要執行的程序
在這些字段里,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對于不指定的字段,要用“*”來填補其位置。
舉例如下:
5 * * * * ls 指定每小時的第5分鐘執行一次ls命令
30 5 * * * ls 指定每天的 5:30 執行ls命令
30 7 8 * * ls 指定每月8號的7:30分執行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30執行ls命令
30 6 * * 0 ls
指定每星期日的6:30執行ls命令[注 0表示星期天,1表示星期1,以此類推,也可以用英文:sun表示周天,mon表示周一等。]
30 3 10,20 * * ls 每月10號及20號的3:30執行ls命令[注:“,”用來連接多個不連續的時段]
25 8-11 * * * ls 每天8-11點的第25分鐘執行ls命令[注:“-”用來連接連續的時段]
*/15 * * * * ls 每15分鐘執行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執行ls命令 ]
30 6 */10 * * ls 每個月中,每隔10天6:30執行一次ls命令[即每月的1、11、21、31日是的6:30執行一次ls命令。 ]
50 7 * * * root
run-parts /etc/cron.daily 每天7:50以root
身份執行/etc/cron.daily目錄中的所有可執行文件
[ 注:run-parts參數表示,執行后面目錄中的所有可執行文件。
下面是Linux 上crontab手冊中的知識點:
1. crontab文件“正式行”的開始
空行、以空格或者“tab”開行的行,被cron(daemon)忽略。
以#開始的行,作為注釋被cron(daemon)忽略。
“注釋”不允許與“命令”放在同一行(作為命令的注釋),會被作為“第六段”,被cron(daemon)執行。
同樣的,也不能放在設置環境變量的同一行。
2. 在crontab文件中指定環境變量
設置變量使用
name = value
這樣的格式,”=”號左右的空格不是必須的。
幾個變量默認已經被設置,比如:
SHELL=/bin/sh
HOEM=/home/nnix
LOGNAME=nnix
其中SHELL和HOME可以重新設定,LOGNAME則不可(大概跟確定crontab文件的位置有關)。
默認,crontab會把執行的輸出發送給crontab的所有者,除非重新設定變量:
MAILTO=other_or_email
另外,當crontab發送輸入時的郵件編碼,可以通過設置變量 CONTENT_TYPE 和 CONTENT_TRANSFER_ENCODING 來使用正確的編碼來發送郵件。
3. crontab 文件的分段
依次分別是
- 分(0-59)
- 時(0-23)
- 日(1-31)
- 月(1-23,或者英文名)
- 周(0-6,或者英文名,0表示周日)
- 要執行的內容
4. 前五段:時間和日期
1)表示任意:* 號表示 “任意”(first-last)。
2)指定數字,表示指定的時間。
3)指定段,表示“開始-結束”內包含的數:比如3-6,表示3,4,5,6
4)指定列表:比如 “1,2,3,4″,”0-4,8-12″
5)指定“步長”:8-14/2 表示8,10,12,14
5. 模糊的第六段:
1)除去前五段,從第六段開始到換行符或者“%”為止,為要執行的命令。
2)默認第六段將被/bin/sh執行,除非在crontab文件中指定了非/bin/sh的SHELL變量。
3)第六段中的”%”號,除非前面加”\”號轉交,否則,“%”號將結束命令行、換行的意義,并且其后的內容會被做為標準輸入發送給前面的命令。
6. 沖突的邏輯
日期可以用月限定,也可以用“星期”指定,如果兩個段有沖突(比如這兩段不同時為“*”),那么,第六段的命令將在匹配任何一個的情況下運行,比如
“30 4 1,15 * 5″,將在每月的1號和15號 加 每個周五,上午4:30運行。
7. crontab文件中的神密符號“%”
可能會遇到的一個問題是,在第六段中需要使用date生成日志文件名,比如:
0 4 * * * /opt/cron/mysql_dump.sh > /srv/logs/`date +%y-%m-%d`.dump.log
這時會發現crontab怎么也不運行這個mysql_dump.sh,也看不到有日志生成。這是因為在crontab文件中,”%”是有特殊含義 的。假如不需要“%”的特殊作用,需要使用轉義符轉義。上面應該寫成:
0 4 * * * /opt/cron/mysql_dump.sh > /srv/logs/`date +\%y-\%m-\%d`.dump.log
“%”在crontab文件中,有“結束命令行”、“換行”、“重定向”的作用,比如:
0 22 * * 1-5 mail -s “It’s 10:00 pm” joe%Joe,%%Where are your kids?%
將會在周一至周五的22:00發送一分內容為:
Joe,<換行>
<換行>
Where are your kids?<換行>
8. 不能理解的特殊用法
@reboot : Run once, at startup.
為了達到在開機后運行,且只運行一次的目的,除了這個,恐怕無法通過前五段的設置來實現吧?
cron是linux下定時執行工具,可在完全無人工干預的情況下作業。可以用一下命令來手動開啟或關閉該任務:
/sbin/service crond start 啟動服務
/sbin/service crond stop 關閉服務
/sbin/service crond restart 重新啟動服務
/sbin/service crond reload 重新加載服務
你也可以將這個服務在系統啟動的時候自動啟動:
在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crond start
現在Cron這個服務已經在進程里面了,我們就可以用這個服務了
crontab -u root -e可以編輯制定用戶
每次編輯完某個用戶的cron設置后,cron自動在/var/spool
/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件是不可以直接編輯的,只可以用crontab -e
來編輯。cron啟動后每過一份鐘讀一次這個文件,檢查是否要執行里面的命令。因此此文件修改后不需要重新啟動cron服務。
2.編輯/etc/crontab 文件配置cron
cron服務每分鐘不僅要讀一次/var/spool/cron內的所有文
件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用cron服務做一些事情。用crontab配置是針對某個用戶的,而編輯
/etc/crontab是針對系統的任務。此文件的文件格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號
HOME=/ //使用者運行的路徑,這里是根目錄
# run-parts
01 * * * * root /home/bluesky/test.sh>>test.log //每小時執行test.sh的腳本
02 4 * * * root /home/bluesky/test.sh//每天執行test.sh內的腳本
22 4 * * 0 root /home/bluesky/test.sh //每星期執行test.sh內的腳本
42 4 1 * * root run-parts /home/bluesky/test.sh //每月去執行test.sh內的腳本
大家注意"run-parts"這個參數了,如果去掉這個參數的話,后面就可以寫要運行的某個腳本名,而不是文件夾名了。