UNIX中crontab 應用詳解)

來源:互聯網
上載者:User
http://hi.baidu.com/totorol/blog/item/8349643187099d1debc4af8f.html
crontab命令
  crontab命令用於安裝、刪除或者列出用於驅動cron後台進程的表格。也就是說,使用者把需要執行的命令序列放到crontab檔案中以獲得執行。每個使用者都可以有自己的crontab檔案。下面就來看看如何建立一個crontab檔案。

  在/var/spool/cron下的crontab檔案不可以直接建立或者直接修改。crontab檔案是通過crontab命令得到的。現在假設有個使用者名稱為foxy,需要建立自己的一個crontab檔案。首先可以使用任何文字編輯器建立一個新檔案,然後向其中寫入需要啟動並執行命令和要定期執行的時間。

  然後存檔退出。假設該檔案為/tmp/test.cron。再後就是使用crontab命令來安裝這個檔案,使之成為該使用者的crontab檔案。鍵入:

  crontab test.cron

  這樣一個crontab 檔案就建立好了。可以轉到/var/spool/cron目錄下面查看,發現多了一個foxy檔案。這個檔案就是所需的crontab 檔案。用more命令查看該檔案的內容可以發現檔案頭有三行資訊:

  #DO NOT EDIT THIS FILE -edit the master and reinstall.

  #(test.cron installed on Mon Feb 22 14:20:20 1999)

  #(cron version --$Id:crontab.c,v 2.13 1994/01/17 03:20:37 vivie Exp $)

  大概意思是:

  #切勿編輯此檔案——如果需要改變請編輯源檔案然後重新安裝。

  #test.cron檔案安裝時間:14:20:20 02/22/1999

  如果需要改變其中的命令內容時,還是需要重新編輯原來的檔案,然後再使用crontab命令安裝。

  可以使用crontab命令的使用者是有限制的。如果/etc/cron.allow檔案存在,那麼只有其中列出的使用者才能使用該命令;如果該檔案不存在但cron.deny檔案存在,那麼只有未列在該檔案中的使用者才能使用crontab命令;如果兩個檔案都不存在,那就取決於一些參數的設定,可能是只允許超級使用者使用該命令,也可能是所有使用者都可以使用該命令。

  crontab命令的文法格式如下:

  crontab [-u user] file

  crontab [-u user]{-l|-r|-e}

  第一種格式用於安裝一個新的crontab 檔案,安裝 淳褪莊ile所指的檔案,如果使用“-”符號作為檔案名稱,那就意味著使用標準輸入作為安裝來源。

  -u 如果使用該選項,也就是指定了是哪個具體使用者的crontab 檔案將被修改。如果不指定該選項,crontab 將預設是*作者本人的crontab ,也就是執行該crontab 命令的使用者的crontab 檔案將被修改。但是請注意,如果使用了su命令再使用crontab 命令很可能就會出現混亂的情況。所以如果是使用了su命令,最好使用-u選項來指定究竟是哪個使用者的crontab檔案。

  -l 在標準輸出上顯示當前的crontab。

  -r 刪除當前的crontab檔案。

  -e 使用VISUAL或者EDITOR環境變數所指的編輯器編輯當前的crontab檔案。當結束編輯離開時,編輯後的檔案將自動安裝。

  [例7]

  # crontab -l #列出使用者目前的crontab。

  10 6 * * * date

  0 */2 * * * date

  0 23-7/2,8 * * * date

  #

  在crontab檔案中如何輸入需要執行的命令和時間。該檔案中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。每個域之間使用空格或者定位字元分隔。格式如下:

  minute hour day-of-month month-of-year day-of-week commands

  第一項是分鐘,第二項是小時,第三項是一個月的第幾天,第四項是一年的第幾個月,第五項是一周的星期幾,第六項是要執行的命令。這些項都不可為空,必須填入。如果使用者不需要指定其中的幾項,那麼可以使用*代替。因為*是統配符,可以代替任何字元,所以就可以認為是任何時間,也就是該項被忽略了。在表4-1中給出了每項的合法範圍。

 表4-1 指定時間的合法範圍

  時間
  合法值

  minute
  00-59

  hour
  00-23,其中00點就是晚上12點

  day-of-month
  01-31

  month-of-year
  01-12

  day-of-week
  0-6,其中周日是0

  這樣使用者就可以往crontab 檔案中寫入無限多的行以完成無限多的命令。命令域中可以寫入所有可以在命令列寫入的命令和符號,其他所有時間域都支援列舉,也就是域中可以寫入很多的時間值,只要滿足這些時間值中的任何一個都執行命令,每兩個時間值中間使用逗號分隔。

 除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值範圍內的數字,"/"代表每的意思,"*/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。幾個例子:

每天早上6點

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從螢幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。

每兩個小時

0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11點到早上8點之間每兩個小時,早上八點

0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

0 11 4 * 1-3 command line

1月1日早上4點

0 4 1 1 * command line

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳號
HOME=/ //使用者啟動並執行路徑,這裡是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的指令碼
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的指令碼
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly內的指令碼
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的指令碼

大家注意"run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要啟動並執行某個指令碼名,而不是檔案夾名了。  

[例8]

  5,15,25,35,45,55 16,17,18 * * * command

  這就是表示任意天任意月,其實就是每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。

  [例9] 在每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。那麼在crontab 檔案中就應該寫入如下欄位:

  00 15 * * 1,3,5 shutdown -r +5

  然後將該檔案存檔為foxy.cron,再鍵入crontab foxy.cron安裝該檔案。

  [例10] 每小時的10分,40分執行使用者目錄下的innd/bbslin這個指令:

  10,40 * * * * innd/bbslink

  [例11] 每小時的1分執行使用者目錄下的bin/account這個指令:

  1 * * * * bin/account

  [例12] 每天早晨三點二十分執行使用者目錄下如下所示的兩個指令(每個指令以;分隔):

  20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)

  [例13] 每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,並把結果添加在mm.txt這個檔案之後(mm.txt檔案位於使用者自己的目錄位置)。

  12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt

  [例14] 我們來看一個超級使用者的crontab檔案:

  #Run the ‘atrun’ program every minutes

  #This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’.

  0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun

  40 7 * * * updatedb

  8,10,22,30,39,46,54,58 * * * * /bin/sync

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.