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