Linux作業系統定時任務系統 Cron 入門

season0891發表於2011-01-01
Linux作業系統定時任務系統 Cron 入門
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下執行作業。由於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這個服務已經在程式裡面了,我們就可以用這個服務了,Cron服務提供以下幾種介面供大家使用:
1.直接用crontab命令編輯
cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些引數與說明:
crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個命令的時候需要此引數
crontab -l //列出某個使用者cron服務的詳細內容
crontab -r //刪除沒個使用者的cron服務
crontab -e //編輯某個使用者的cron服務
比如說root檢視自己的cron設定:crontab -u root -l
再例如,root想刪除fred的cron設定:crontab -u fred -r
在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab -u root -e
進入vi編輯模式,編輯的內容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任務排程的crond常駐命令
crond 是linux用來定期執行程式的命令。當安裝完成作業系統之後,預設便會啟動此任務排程命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
1、linux任務排程的工作主要分為以下兩類:
*系統執行的工作:系統週期性所要執行的工作,如備份系統資料、清理快取
*個人執行的工作:某個使用者定期要做的工作,例如每隔10分鐘檢查郵件伺服器是否有新信,這些工作可由每個使用者自行設定。
2.crontab命令選項:
-u指定一個使用者,
-l列出某個使用者的任務計劃,
-r刪除某個使用者的任務,
-e編輯某個使用者的任務
3.cron檔案語法:
分     小時   日       月       星期     命令
0-59   0-23   1-31   1-12     0-6     command     (取值範圍,0表示週日一般一行對應一個任務)
4.記住幾個特殊符號的含義:
"*"代表取值範圍內的數字,
"/"代表"每",
"-"代表從某個數字到某個數字,
","分開幾個離散的數字
一、任務排程設定檔案的寫法
可用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參數列示,執行後面目錄中的所有可執行檔案。 ]
二、新增排程任務
新增排程任務可用兩種方法:
1、在命令列輸入: crontab -e 然後新增相應的任務,wq存檔退出。
2、直接編輯/etc/crontab 檔案,即vi /etc/crontab,新增相應的任務。
三、檢視排程任務
crontab -l //列出當前的所有排程任務
crontab -l -u jp   //列出使用者jp的所有排程任務
四、刪除任務排程工作
crontab -r   //刪除所有任務排程工作
五、任務排程執行結果的轉向
例1:每天5:30執行ls命令,並把結果輸出到/jp/test檔案中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示執行結果及錯誤資訊。
編輯/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 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"這個引數了,如果去掉這個引數的話,後面就可以寫要執行的某個指令碼名,而不是資料夾名了
例如:         1、在命令列輸入: crontab -e 然後新增相應的任務,wq存檔退出。
2、直接編輯/etc/crontab 檔案,即vi /etc/crontab,新增相應的任務
11 2 21 10 * rm -rf /mnt/fb

在 Redhat Linux裡,cron的相關配置檔案:
/etc/crontab   記錄環境變數(SHELL,PATH,MAILTO,HOME)和系統預先制定的cron任務(cron.hourly/daily/weekly /monthly)。
(當cron任務無法執行時,可以檢查一下這裡的環境變數和命令路徑)
/etc/cron.deny    被記錄在此的使用者不能提交cron任務
/etc/cron.allow   被記錄在此的使用者可以提交cron任務
(這兩個檔案不存在時,只有root有提交cron任務的許可權)
/etc/cron.d/,/etc/cron.daily /、cron.hourly/、/cron.monthly/   存放系統預先制定的cron任務
/var/spool/cron/   所有使用者的cron任務,與使用者名稱相對應
/var/log/cron   cron的日誌資訊
cron的配置檔案稱為crontab,是“cron table”的簡寫。cron在三個地方查詢crontab檔案:/etc/crontab,/etc/cron.d/,/var/spool /cron。
crontab檔案的格式:
minute hour day month weekday [username] command
minute   分鐘   0-59
hour      小時   0-23
day       日期   1-31
month    月份   1-12
weekday   星期幾   0-6(0代表星期天)
這些和時間相關的欄位由空格分隔,每個欄位必須指定一個值:
*(星號),意味著所有的允許值
一個整數,精確匹配
兩個被破折號分開的整數,表示範圍
多個被逗號分開的整數或範圍,表示匹配列出的這些值
/n 表示步長,範圍/n
其中“天”由day和weekday確定,都匹配
其中:星號可以匹配所有字元;一個整數必須精確匹配;用短劃線隔開的兩個整數,他們匹配的是值的範圍;
用逗號隔開的整數或者範圍,匹配任何被列到的值。
例如: 45 10 *   * 1-5          上午10:45從週一到週五
不要把星號放在第一個欄位,除非你想這個命令每分鐘都執行。
weekday與day若同時指定,則滿足二者之一即被執行。
例如:0,30   * 13   * 5             星期五每半小時,以及每月13號每半小時
30   2   *   *   1   (cd /users/joe/project; make)

20   1   * *   * find /tmp -atime +3 -exec rm -f { } ';'
每天凌晨1:20刪除/tmp目錄中的3天內未被訪問的所有檔案
55 23 *   * 0-3,6    /staff/trent/bin/acct-script
除了星期四、五外每天23:55 執行acct-script

crontab 命令
crontab [-u user] [-l|-r|-e]
-l 列出使用者的cron任務
-r 刪除cron任務
-e 編輯cron任務
-i 刪除前提示
注:不帶引數的crontab命令將試圖從標準輸入讀取crontab的內容。在這個模式下,如用 Control-D來退出的話,會刪除整個crontab內容。應使用Control-C來退出。
crontab [-u user] filename
從檔案匯入crontab任務。

command就是要執行的sh命令,可以是任意有效的shell命令,並且不應該加引號。cron 認為command一直是到這一行的末尾,它可以包含空格或製表符。
cron使用百分號(%)來表示command欄位的換行。只有第一個百分號前的文字才會包含在實際命令中,其餘行則作為該命令的標準輸入。
例如:
echo The time is now `date` > /dev/console
write garth %Hi Garth % Remember to get a job.
cd /etc; /bin/mail -s "password file" evi < passwd

管理 crontab
crontab filename 將filename安裝為crontab檔案,它將替代crontab檔案以前版本。
crontab -e     檢出一個crontab的一個副本,用編輯器開啟,然後將其重新提交給crontab目錄(/var/spool/cron/'username')。
crontab -l      將crontab中內容列在標準輸出上。
crontab -r       刪除crontab。
不帶命令列的 crontab將試圖從他自己的標準輸出中讀取crontab內容。如果意外進入,不要試圖使用Ctrl-D退出,那樣會刪除整個crontab內容,而要使用Ctrl-C退出。
對於root,有這樣的命令:crontab -u loki -r   刪除屬於loki的crontab檔案。
控制使用 crontab 命令
/etc/cron.allow   /etc/cron.deny檔案控制哪一個使用者可以使用 crontab 命令。root 使用者可以建立、編輯或刪除這些檔案。這些檔案的條目是使用者登入名稱,每個名稱佔一行。如果登入標識和多個的登入名稱相關聯,這個crontab 命令採用第一個在 /etc/passwd 檔案中的登入名稱,而不管當前實際使用哪一個登入名稱。而且,要允許使用者啟動 cron 作業,應該使用 chuser 命令將 /etc/security/user 檔案中的守護程式屬性設定為 TRUE。
以下關於 cron.allow 檔案的一個示例:
root
nick
dee
sarah
如果 cron.allow 檔案存在,只有在檔案中出現其登入名稱的使用者可以使用 crontab 命令。root 使用者的登入名必須出現在 cron.allow 檔案中,如果這個檔案存在的話。系統管理員可以明確的停止一個使用者,透過使用 crontab 命令,同時在cron.deny 檔案中列出使用者的登入名。如果只有 cron.deny 檔案存在,任一名稱沒有出現在這個檔案中的使用者可以使用 crontab 命令。
如果以下一個條件成立,使用者將不能使用 crontab 命令
文章來自[SVN中文技術網]轉發請保留本站地址:

另注意,RHEL5直接新增到 /etc/crontab中的任務計劃需要加到run-parts前面才有效。可能按cron指令碼所編寫的是,當/etc/crontab中任務計劃不存 在時,就執行相對應的/etc/cron.{hourly,daily,weekly,monthly},放在 hourly,daily,weekly,monthly後面的計劃任務就不會再處理,所以應該放在 hourly,daily,weekly,monthly前面。也可能是單獨的指令碼計劃都要放在run-parts前面吧。。。

come from :%C1%EE%BA%FC%D2%BB%B6%FE/blog/item/8b2027f2a200c9c60b46e06c.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-683128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章