命令簡介
crontab-操作每個用戶的守護程序和該執行的時間表。
部分參數說明
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用標準輸入替代目前的crontab.
crontab-1[user]-列出用戶目前的crontab.
crontab-e[user]-編輯用戶目前的crontab.
crontab-d[user]-刪除用戶目前的crontab.
crontab-c dir- 指定crontab的目錄。
crontab文件的格式:M H D m d cmd.
M: 分鐘(0-59)。
H:小時(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期內的天(0~6,0爲星期天)。
cmd要運行的程序,程序被送入sh執行,這個shell只有USERHOMESHELL這三個環境變量。
所以就在自己的crontab -e 中find mv cp 操作是被靜止的
你可以讓他執行一個腳本,讓他自動執行一個.sh文件
15 * * * * /home/zhifeifeng/Desktop/back.sh
mkdir -p /home/zhifeifeng/Desktop/data_back mkdir -p /home/zhifeifeng/Desktop/data_back/`date -I` cp /home/zhifeifeng/Desktop/data/report_`date +%H` /home/zhifeifeng/Desktop/data_back/`date -I`
注意這裏我們用到了 `date XXX`表示一個當前日期的東西
mv oldfile `date +%Y-%m-%d` mv oldfile `date -I`
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。由於Cron 是Linux的內置服務,但它不自動起來,可以用以下的方法啓動、關閉這個服務:
/sbin/service crond start //啓動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啓服務
/sbin/service crond reload //重新載入配置
1.crontab命令選項:
-u指定一個用戶,
-l列出某個用戶的任務計劃,
-r刪除某個用戶的任務,
-e編輯某個用戶的任務
2.cron文件語法:
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值範圍,0表示週日一般一行對應一個任務)
3.記住幾個特殊符號的含義:
“*”代表取值範圍內的數字,
“/”代表”每”,
“-”代表從某個數字到某個數字,
“,”分開幾個離散的數字
任務調度設置文件的寫法
可用crontab -e命令來編輯,編輯的是/var/spool/cron下對應用戶的cron文件,也可以直接修改/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命令。 ]
每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行文件
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts參數表示,執行後面目錄中的所有可執行文件。
添加後保存的路徑是 /var/spool/cron,可以用vi查看修改,這個不難
一句話總結crontab(指這個應用、這個機制)的作用:”run this command at this time on this day”,在指定的日期、時間,運行指定的命令。下面是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-7,或者英文名,0和7均表示週日)
- 要執行的內容
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.