linux系統中的排程週期任務:cron

eric0435發表於2013-08-24
linux系統中的排程週期任務:cron
主要概念
cron工具用來排程經常重複的任務
crontab命令是編輯crontab檔案的一個前端程式
crontab檔案使用5個欄位來規定計時資訊
cron作業中的標準輸出會作為郵件寄給使用者

執行週期任務
人們經常發現自己會定期執行一些任務.在系統管理中,這些任務包括從/tmp目錄下刪除舊的,不使用的檔案,或者經常
檢查記錄登入資訊的檔案以確保其不會變得過大.其他使用者可能會有自己的任務,如檢查不再使用的大型檔案,或者檢視
網站上是否公佈了新的資訊.

cron工具允許使用者配置要定期執行的命令,如每隔十分鐘,每週四一次,或每月兩次.使用者用crontab命令配置自己的任務
計劃(cron table),指定何種命令在何時執行.這些任務由傳統的linux(和unix)守護程式,即crond守護程式管理.

cron服務
crond守護程式是代表系統或個人使用者執行週期任務的守護程式.通常這個守護程式隨著系統的啟動而啟動,因此大多數
使用者都不會注意到.透過列出所有程式且搜尋crond,你可以確定crond守護程式有沒有在執行.
[root@sidatabase /]# ps aux | grep crond
root      3204  0.0  0.0 117204  1368 ?        Ss   Aug09   0:11 crond
root      4687  0.0  0.0 103244   872 pts/0    S+   14:52   0:00 grep crond

如果crond守護程式沒有在執行,系統管理員需要以根使用者身份來啟動crond守護程式.

crontab語法
使用者透過配置一個稱為"cron table"(經常縮寫成"crontab")的檔案指定要執行哪些作業以及何時執行.下面列出了一個
crontab檔案的例子.

30 23 * * 6  su - sybx -c "/sydata/app/db/bin/rman target / msglog=/sybak/bak0.log  cmdfile=/sybak/sybx_rman_script/bak0"
30 23 * * 0,1,2,3,4,5  su - sybx -c "/sydata/app/db/bin/rman target / msglog=/sybak/bak1.log  cmdfile=/sybak/sybx_rman_script/bak1"
30 2 * * 0,1,2,3,4,5,6  su - sybx -c "/sydata/app/db/bin/rman target / msglog=/sybak/bakarch.log  cmdfile=/sybak/sybx_rman_script/bakarch"
30 3 * * 0,1,2,3,4,5,6  su - sybx -c "/sydata/app/db/bin/rman target / msglog=/sybak/delbackup.log  cmdfile=/sybak/sybx_rman_script/delbackup"

crontab檔案是一個以行為執行單位的配置檔案,每行執行三種功能中的一種:
註釋
首字元(非空格)是一個#的行被認為是註釋,可忽略.

環境變數
具有name=value格式的所有行被用來定義環境變數

cron命令
其他的任何(非空)行被認為是cron命令,由下面描述的六個欄位組成.
cron命令列包括六個用空白分隔的欄位.前五個欄位用來指定何時執行命令,剩餘的第六個欄位(包括所有在第五個字
段後的部分)指定要執行的命令.前五個欄位指定下列時間資訊:

minute      hour   day of month    month(1=January,....)   day of week (0=Sunday,....)    command to run

25          04     1               *                       *                              echo "pay bills"

前五種欄位的每一種都必須含有一個使用下列語法的標記
                              crontab時間表示語法標記
標記             含義            例子                   解釋(如果用在第一個欄位中)
*                每次            *                      每分鐘
n                在指定時間      10                     在每小時過10分時
n,n,...          在任何指定時間  22,52                  在每小時過22分和每小時過52分時
*/n              每隔n次         */15                   每隔15分鐘(在每個整點,一刻鐘,半點,或差一刻整點時)

使用crontab命令
使用者很少直接管理自己的crontab檔案(甚至不知道crontab檔案被儲存在哪裡),而是使用crontab命令來編輯,列出或者
刪除它.
crontab {[-e] | [-l] | [-r]}
crontab file
編輯,列出或刪除當膠crontab檔案,或者用file取代當前crontab檔案.crontab命令列選項釋義如下
                                 crontab命令列選項
選項                                              作用
-e                                                編輯當前檔案
-l                                                列出當前檔案
-r                                                刪除當前檔案

直接編輯crontab檔案
使用者經常用crontab -e 直接編輯自己的crontab檔案.crontab命令將把當前crontab配置開啟到使用者預設的編輯器中.
當使用者編輯完檔案並退出編輯器時,修改過的檔案內容作為新的crontab配置被新增.

預設的編輯器是/bin/vi,然而crontab像其他許多命令一樣,檢查editor環境變數.如果變理已經被設定,它將會被用來
替代預設編輯器.

環境變數與cron
配置cron作業時,使用者應該知道一個微妙的細節.當crond守護程式啟動使用者命令時,它沒有從shell中執行命令,而是
直接對這個命令派生和執行(fork和exec).這有一個重要的含義:啟動時被shell配置的任何環境變數或別名(alias),
例如在/etc/profile或.bash_profile中被定義的任何環境變數,不會在cron執行命令時出現.

如果使用者想定義一個環境變數,需要在自己的crontab配置中定義該變數.




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

相關文章