天天看點

Linux crontab 指令 定時執行

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