cron,linux定時執行工具詳解及實例

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  
  
這 個格式的前一部分是對時間的設定,後面一部分是要執行的命令,如果要執行的命令太多,可以把這些命令寫到一個腳本里面,然後在這裏直接調用這個腳本就可以 了,調用的時候記得寫出命令的完整路徑。時間的設定我們有一定的約定,前面五個*號代表五個數字,數字的取值範圍和含義如下:  
  
分鐘 (0 - 59 )  
  
小時 (0 - 23 )  
  
日期 (1 - 31 )  
  
月份 (1 - 12 )  
  
星期 (0 - 6 //0代表星期天   
  
除了數字還有幾個個特殊的符號就是"*" "/" "-" "," ,*代表所有的取值範圍內的數字, "/" 代表每的意思, "*/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  
  
每 次編輯完某個用戶的cron設置後,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件 中,這個文件是不可以直接編輯的,只可以用crontab -e 來編輯。cron啓動後每過一份鍾讀一次這個文件,檢查是否要執行裏面的命令。因此此文 件修改後不需要重新啓動cron服務。  
  
2 .編輯/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" 這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名了。  
   
以下轉自:http://hi.baidu.com/hdsoft/blog/item/3f33882b623ab7f9e6cd4008.html    
crontab task 格式   
  
* * * * * task  
分 時 日 月 周 task  
  
1 列 分鐘 1 5   9  ( 0 表示 0 分)  
2 列 小時 1 2   3 0 表示子夜)  
3 列 日 1 3   1    
4 列 月 1 1   2    
5 列 星期 0 6 0 表示星期天)  
6 列 要運行的命令  
  
一些例子:  
30   21 * * * /apps/bin/cleanup.sh  
上面的例子表示每晚的2   1  :  3   0 運行/ a p p s / b i n目錄下的c l e a n u p . s h。  
45   4   1 , 10 , 22  * * /apps/bin/backup.sh  
上面的例子表示每月1 1   0 2   2 日的 4  :  4   5 運行/ a p p s / b i n目錄下的b a c k u p . s h。  
10   1  * *  6 , 0  /bin/find -name  "core"  -exec rm {} ;  
上面的例子表示每週六、週日的1  :  1   0 運行一個f i n d命令。  
0 , 30   18 - 23  * * * /apps/bin/dbcheck.sh  
上面的例子表示在每天1   8  :  0   0 2   3  :  0   0 之間每隔 3   0 分鐘運行/ a p p s / b i n目錄下的d b c h e c k . s h。  
0   23  * *  6  /apps/bin/qtrend.sh  
上面的例子表示每星期六的11  :  0   0  p m運行/ a p p s / b i n目錄下的q t r e n d . s h  
  
實現定時task的兩種方式  
一種是編輯一個文件,用crontab 載入  
一種是用crontab -e 直接編輯生效  
  
我自己一個例子  
  
每隔以一分鐘往一個文件打入一堆字符  
先vi crontab1  
#every minute echo char  to file  
1 - 59  * * * * echo `date` " ljn"  >> /opt/lijie/lj.txt  
最好加上註釋  
這樣就能明確當前的這個定時任務的目的  
然後 crontab crontab1載入crontab1這個定時任務  
  
   
  
另外一種是  
crontab -e  
#every minute echo char  to file  
1 - 59  * * * * echo `date` " ljn"  >> /opt/lijie/lj.txt  
  
date 用單引號,是表示如果date是一個命令,就作爲命令執行  
如果你直接用date ,那麼輸出的是"date" 這個字符串,而不是date這個命令的執行結果  
  
>> 是附加到文件末尾,而>是直接覆蓋文件  
  
如果crontab -e無法編輯  
那麼是你的環境變量沒有配置  
請你進入 vi /etc/profile  
加上  
EDITOR=vi  
export EDITOR  

  

crontab -l 列出所有定時任務   
如果要刪除一個定時任務  
那麼  
crontab -e  
註釋掉對應定時任務語句  
例如要刪除我剛剛定義的那個定時任務  
#every minute echo char  to file  
1 - 59  * * * * echo `date` " ljn"  >> /opt/lijie/lj.txt  
只需要  
#every minute echo char  to file  
#1 - 59  * * * * echo `date` " ljn"  >> /opt/lijie/lj.txt  
  
定時運行java例子:  
0   5  * * * /root/herosReport_day.sh  
  
cat herosReport_day.sh   
#!/bin/sh  
/opt/jdk1.5 /bin/java -Dfile.encoding=UTF- 8  -Xmx512m -cp /opt/baofeng_paihangbang/program/lib/commons-email- 1.0 .jar:/opt/baofeng_paihangbang/program/lib/activation.jar:/opt/baofeng_paihangbang/program/lib/ant.jar:/opt/baofeng_paihangbang/program/lib/commons-codec- 1.3 .jar:/opt/baofeng_paihangbang/program/lib/commons-collections- 3.1 .jar:/opt/baofeng_paihangbang/program/lib/commons-configuration- 1.1 .jar:/opt/baofeng_paihangbang/program/lib/commons-dbcp- 1.2 . 1 .jar:/opt/baofeng_paihangbang/program/lib/commons-httpclient- 3.1 -alpha1.jar:/opt/baofeng_paihangbang/program/lib/commons-io.jar:/opt/baofeng_paihangbang/program/lib/commons-lang- 2.1 .jar:/opt/baofeng_paihangbang/program/lib/commons-logging.jar:/opt/baofeng_paihangbang/program/lib/commons-pool- 1.2 .jar:/opt/baofeng_paihangbang/program/lib/dom4j.jar:/opt/baofeng_paihangbang/program/lib/dom.jar:/opt/baofeng_paihangbang/program/lib/jaxen-core.jar:/opt/baofeng_paihangbang/program/lib/jaxen-jdom.jar:/opt/baofeng_paihangbang/program/lib/jdom.jar:/opt/baofeng_paihangbang/program/lib/log4j.jar:/opt/baofeng_paihangbang/program/lib/mysql-connector-java- 3.0 . 9 -stable-bin.jar:/opt/baofeng_paihangbang/program/lib/saxpath.jar:/opt/baofeng_paihangbang/program/ com/community/AnalysisTop/DataAnalysisTopMain;  
  
   
  
如果用crontab -r  
就刪除拉所有的定時任務  
  
   
  
特別注意:  
1 , 如果用crontab 文件來載入定時任務,將會沖掉定時任務  
所以如果要新增定時任務,最好就用crontab -e來新增定時任務  
不要用crontab 文件。  
  
2 , crontab的日誌文件爲 /var/log/cron  
  
3 , 如果使用 crontab <filename> 來設置cron,一定要注意文件亂碼的問題。我就碰到一個問題,/var/log/cron 日誌裏面顯示 Dec  28   11 : 34 : 00  TARGET CROND[ 13449 ]: (hnuc) CMD (/home /hnuc/shell/t.sh^M) 後面的~M是亂碼,原因是:我是使用editplus編輯的cron file,裏面的回車換行符號是dos的 而不是linux或者unix的。 這裏的^M 實際上是個dos的換行符,在linux環境下解析成這個了。  
   
  
   
   
 原文地址 http://blog.ouc.edu.cn/2007/01/cronlinux.html    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章