crontab指令,用來執行一些定時任務
指令 格式: minute hour day month weekday command
取值範圍: (0-59) (0-24) (1-31) (1-12) (0-6)
系統提供了幾個特殊符号,使得時間的表示很靈活:
( * ) 表示取值範圍内的所有數字
( / ) 表示每隔..時間,*/5表示每5個時間機關
( - ) 表示連續時間段
( , ) 用于列舉多個數字
舉例說明:
0 0 * * 1 echo Monday >> /home/test.txt —每個星期一淩晨執行
* * * * date >> /home/date.txt —每分鐘執行一次
*/10 * * * 1-3 echo “ten minutes pasted” >> /home/time.txt —星期一到三每10分鐘執行一次。
通常,系統并不允許使用者直接編輯計劃書,/var/spool /cron/crontabs目錄也隻有root使用者 才可讀寫。為了友善計劃書的管理,系統提供了crontab指令:
用法:
crontab [ -u user ] 檔案名
crontab [ -u user ] { -l | -r | -e }
-u 計劃書所屬的使用者,預設為目前使用者
-l 列出目前計劃書的内容
-e 編輯計劃書,系統預設的編輯器是vi。儲存時,系統會檢查格式是否符合要求。
-r 删除計劃書
#crontab -u oracle /home/oracle/plan.txt 将plan.txt送出為使用者oracle的計劃書
#crontab /home/myplan.txt 将myplan.txt送出為目前使用者的計劃書 #contab -r 清除目前的計劃書
——————————————–引用的另一篇文章 ——————————————-
我用CentOS為例。 簡介:
cron來源于希臘單詞chronos(意為“時間”),是linux系統下一個自動執行指定任務的程式。例如,你想在每晚睡覺期間建立某些檔案 或檔案夾的備份,就可以用cron來自動執行。
CentOS的cron預設是開機啟動的,如果沒有開機啟動可以用chkconfig
[root@chenlb-pc ~]# chkconfig crond on
檢視crond是否開機啟動
[root@chenlb-pc ~]# chkconfig –list crond
crond 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
說明已經是開機啟動。
cron是執行crontab裡的任務,是以要把任務加到crontab裡。
1.檢視目前使用者的任務。
[chenlb@chenlb-pc ~]$ crontab -l
no crontab for chenlb
現在還沒有任務,可以用crontab -e來編輯任務(可以直接輸入crontab是建立,然後回車,Ctrl+D儲存,注意這樣會覆寫以前的,不建議直接用crontab),然後再新的檔案 裡輸入以下内容。
2.編輯任務
[chenlb@chenlb-pc ~]$ crontab -e
*/1 * * * * echo `date` >> /home/chenlb/cron-log.txt
上面的意思是指每一分鐘列印時間放到/home/chenlb/cron-log.txt檔案裡,過一分鐘後看是否有效,如下指令。
[chenlb@chenlb-pc ~]$ tail /home/chenlb/cron-log.txt
Wed Jul 2 15:43:01 CST 2008
3.删除任務
[chenlb@chenlb-pc ~]$ crontab -r
說明:如果是root除了有以上的功能,還有-u參數為使用者檢視、編輯、删除任務,如用chenlb編輯任務。
[root@chenlb-pc ~]# crontab -u chenlb -e
解說下任務的文法:
min hour day month week user command
忽略用“*”,每多少的用“/多少”,多個的用“,”,到關系的用“-”
———————————來自htmlor’s blog的示例———————————————-
以下是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
18 16 * * * root run-parts /home/username/cron >> /dev/null 2>&1