在Linux系統(tǒng)的實(shí)際使用中,可能會(huì)經(jīng)常碰到讓系統(tǒng)在某個(gè)特定時(shí)間執(zhí)行某些任務(wù)的情況,比如定時(shí)采集服務(wù)器的狀態(tài)信息、負(fù)載狀況;定時(shí)執(zhí)行某些任務(wù)/腳本來(lái)對(duì)遠(yuǎn)端進(jìn)行數(shù)據(jù)采集等。這里將介紹下crontab的配置參數(shù)以及一些使用實(shí)例。
?
crontab配置文件
Linux下的任務(wù)調(diào)度分為兩類:系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。Linux系統(tǒng)任務(wù)是由 cron (crond) 這個(gè)系統(tǒng)服務(wù)來(lái)控制的,這個(gè)系統(tǒng)服務(wù)是默認(rèn)啟動(dòng)的。用戶自己設(shè)置的計(jì)劃任務(wù)則使用crontab?命令。在CentOS系統(tǒng)中,
cat /etc/crontab
配置文件可以看到如下解釋:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
前四行是用來(lái)配置crond任務(wù)運(yùn)行的環(huán)境變量,第一行SHELL變量指定了系統(tǒng)要使用哪個(gè)shell,這里是bash;第二行PATH變量指定了系統(tǒng)執(zhí)行命令的路徑;第三行MAILTO變量指定了crond的任務(wù)執(zhí)行信息將通過(guò)電子郵件發(fā)送給root用戶,如果MAILTO變量的值為空,則表示不發(fā)送任務(wù)執(zhí)行信息給用戶;第四行的HOME變量指定了在執(zhí)行命令或者腳本時(shí)使用的主目錄。
用戶定期要執(zhí)行的工作,比如用戶數(shù)據(jù)備份、定時(shí)郵件提醒等。用戶可以使用?crontab?工具來(lái)定制自己的計(jì)劃任務(wù)。所有用戶定義的crontab?文件都被保存在?/var/spool/cron目錄中。其文件名與用戶名一致。
crontab文件含義
用戶所建立的crontab文件中,每一行都代表一項(xiàng)任務(wù),每行的每個(gè)字段代表一項(xiàng)設(shè)置,它的格式共分為六個(gè)字段,前五段是時(shí)間設(shè)定段,第六段是要執(zhí)行的命令段,格式如下:
minute hour day month week command
在以上各個(gè)字段中,還可以使用以下特殊字符:
"*"代表所有的取值范圍內(nèi)的數(shù)字,如月份字段為*,則表示1到12個(gè)月;
"/"代表每一定時(shí)間間隔的意思,如分鐘字段為*/10,表示每10分鐘執(zhí)行1次。
"-"代表從某個(gè)區(qū)間范圍,是閉區(qū)間。如“2-5”表示“2,3,4,5”,小時(shí)字段中0-23/2表示在0~23點(diǎn)范圍內(nèi)每2個(gè)小時(shí)執(zhí)行一次。
","分散的數(shù)字(不一定連續(xù)),如1,2,3,4,7,9。
注:由于各個(gè)地方每周第一天不一樣,因此Sunday=0(第一天)或Sunday=7(最后1天)。
crontab命令詳解
格式:
crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
· -u user:用于設(shè)定某個(gè)用戶的crontab服務(wù);
· file: file為命令文件名,表示將file作為crontab的任務(wù)列表文件并載入crontab;
· -e:編輯某個(gè)用戶的crontab文件內(nèi)容,如不指定用戶則表示當(dāng)前用戶;
· -l:顯示某個(gè)用戶的crontab文件內(nèi)容,如不指定用戶則表示當(dāng)前用戶;
· -r:從/var/spool/cron目錄中刪除某個(gè)用戶的crontab文件。
· -i:在刪除用戶的crontab文件時(shí)給確認(rèn)提示。
crontab注意點(diǎn)
crontab有2種編輯方式:直接編輯/etc/crontab文件與crontab –e,其中/etc/crontab里的計(jì)劃任務(wù)是系統(tǒng)中的計(jì)劃任務(wù),而用戶的計(jì)劃任務(wù)需要通過(guò)crontab –e來(lái)編輯;
每次編輯完某個(gè)用戶的cron設(shè)置后,cron自動(dòng)在/var/spool/cron下生成一個(gè)與此用戶同名的文件,此用戶的cron信息都記錄在這個(gè)文件中,這個(gè)文件是不可以直接編輯的,只可以用crontab -e 來(lái)編輯。
crontab中的command盡量使用絕對(duì)路徑,否則會(huì)經(jīng)常因?yàn)槁窂藉e(cuò)誤導(dǎo)致任務(wù)無(wú)法執(zhí)行。
新創(chuàng)建的cron job不會(huì)馬上執(zhí)行,至少要等2分鐘才能執(zhí)行,可從起cron來(lái)立即執(zhí)行。
%在crontab文件中表示“換行”,因此假如腳本或命令含有%,需要使用\%來(lái)進(jìn)行轉(zhuǎn)義。
crontab配置實(shí)例
每一分鐘執(zhí)行一次command(因cron默認(rèn)每1分鐘掃描一次,因此全為*即可)
* ? ?* ? ?* ? ?* ? ?* ?command
每小時(shí)的第3和第15分鐘執(zhí)行command
3,15 ? * ? ?* ? ?* ? ?* ?command
每天上午8-11點(diǎn)的第3和15分鐘執(zhí)行command:
3,15? 8-11? *? *? *? command
每隔2天的上午8-11點(diǎn)的第3和15分鐘執(zhí)行command:
3,15? 8-11? */2? * ? * ?command
每個(gè)星期一的上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行command
3,15? 8-11?? *?? *? 1 command
每晚的21:30重啟smb
30 ?21?? *?? *? *? /etc/init.d/smb restart
每月1、10、22日的4 : 45重啟smb
45? 4? 1,10,22? *? *? /etc/init.d/smb restart
每周六、周日的1 : 10重啟smb
10? 1? *? *? 6,0? /etc/init.d/smb restart
每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 ?18-23 ?* ?* ?* ?/etc/init.d/smb restart
每一小時(shí)重啟smb
* ?*/1 ?* ?* ?* ?/etc/init.d/smb restart
晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)重啟smb
* ?23-7/1 ?* ??* ??* ?/etc/init.d/smb restart
每月的4號(hào)與每周一到周三的11點(diǎn)重啟smb
0 ?11 ?4 ?* ?mon-wed ?/etc/init.d/smb restart
每小時(shí)執(zhí)行/etc/cron.hourly目錄內(nèi)的腳本
0? 1?? *?? *?? *???? root run-parts /etc/cron.hourly
來(lái)源:http://www.icode9.com/content-4-213951.html聯(lián)系客服