每天一個linux命(ming)(ming)令(ling)(50):crontab命(ming)(ming)令(ling)
前一天(tian)學習了 at 命(ming)令是(shi)(shi)針對僅運行一次的(de)(de)任(ren)務(wu)(wu),循(xun)環運行的(de)(de)例(li)行性計(ji)(ji)劃(hua)(hua)(hua)任(ren)務(wu)(wu),linux系(xi)統則(ze)是(shi)(shi)由(you) cron (crond) 這個系(xi)統服(fu)務(wu)(wu)來控制的(de)(de)。Linux 系(xi)統上面(mian)原本(ben)就有非常多的(de)(de)計(ji)(ji)劃(hua)(hua)(hua)性工作,因此這個系(xi)統服(fu)務(wu)(wu)是(shi)(shi)默認啟動的(de)(de)。另外, 由(you)于使(shi)用者自己也可以設置(zhi)計(ji)(ji)劃(hua)(hua)(hua)任(ren)務(wu)(wu),所以, Linux 系(xi)統也提供了使(shi)用者控制計(ji)(ji)劃(hua)(hua)(hua)任(ren)務(wu)(wu)的(de)(de)命(ming)令 :crontab 命(ming)令。
一、crond簡介
crond是linux下用來周期(qi)性的(de)(de)執(zhi)行(xing)某(mou)(mou)種任務(wu)或等待處理某(mou)(mou)些事件(jian)的(de)(de)一個守護進程,與windows下的(de)(de)計劃任務(wu)類似,當安裝(zhuang)完成操作系(xi)統(tong)后,默認會安裝(zhuang)此服務(wu)工具(ju),并(bing)且會自(zi)動啟動crond進程,crond進程每分(fen)鐘會定(ding)期(qi)檢(jian)查是否有要執(zhi)行(xing)的(de)(de)任務(wu),如果有要執(zhi)行(xing)的(de)(de)任務(wu),則自(zi)動執(zhi)行(xing)該任務(wu)。
Linux下的任(ren)務調度(du)(du)分為兩(liang)類(lei),系統任(ren)務調度(du)(du)和用戶任(ren)務調度(du)(du)。
系統(tong)任務(wu)調度(du):系統(tong)周期(qi)性所要執行的(de)工(gong)作,比如寫(xie)緩存數(shu)據(ju)到硬盤、日志(zhi)清(qing)理等(deng)。在/etc目錄下有一個crontab文(wen)件,這個就(jiu)是系統(tong)任務(wu)調度(du)的(de)配(pei)置文(wen)件。
/etc/crontab文(wen)件包括下面幾行:
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@localhost ~]#
前四(si)行(xing)(xing)(xing)是用(yong)來配置(zhi)crond任務運(yun)行(xing)(xing)(xing)的(de)環境變量(liang),第(di)(di)一行(xing)(xing)(xing)SHELL變量(liang)指定了(le)系統要使用(yong)哪個(ge)(ge)shell,這里(li)是bash,第(di)(di)二行(xing)(xing)(xing)PATH變量(liang)指定了(le)系統執行(xing)(xing)(xing)命令的(de)路徑,第(di)(di)三行(xing)(xing)(xing)MAILTO變量(liang)指定了(le)crond的(de)任務執行(xing)(xing)(xing)信(xin)息將通過(guo)電子郵件發送給root用(yong)戶,如果(guo)MAILTO變量(liang)的(de)值為(wei)空,則表示(shi)(shi)不(bu)發送任務執行(xing)(xing)(xing)信(xin)息給用(yong)戶,第(di)(di)四(si)行(xing)(xing)(xing)的(de)HOME變量(liang)指定了(le)在執行(xing)(xing)(xing)命令或者腳本時使用(yong)的(de)主目錄。第(di)(di)六至九行(xing)(xing)(xing)表示(shi)(shi)的(de)含(han)義將在下個(ge)(ge)小節詳細講述。這里(li)不(bu)在多說(shuo)。
用(yong)戶(hu)任務調度(du):用(yong)戶(hu)定(ding)期要執行的(de)工作(zuo),比如用(yong)戶(hu)數(shu)據備(bei)份(fen)、定(ding)時郵件提醒等。用(yong)戶(hu)可以(yi)使用(yong) crontab 工具來定(ding)制自己的(de)計劃任務。所(suo)有用(yong)戶(hu)定(ding)義的(de)crontab 文(wen)(wen)件都(dou)被保存在 /var/spool/cron目錄中(zhong)。其文(wen)(wen)件名與用(yong)戶(hu)名一致。
使用者(zhe)權限文件:
文件:
/etc/cron.deny
說明(ming):
該文件(jian)中所列用(yong)戶不允許使用(yong)crontab命令(ling)
文件(jian):
/etc/cron.allow
說明:
該(gai)文件中(zhong)所列(lie)用戶允許(xu)使用crontab命(ming)令
文件:
/var/spool/cron/
說明:
所有(you)用戶crontab文件存放的目錄,以(yi)用戶名(ming)命(ming)名(ming)
crontab文件(jian)的含義:
用戶所建立的crontab文件中,每一(yi)行都代(dai)表一(yi)項任(ren)務,每行的每個字段(duan)(duan)代(dai)表一(yi)項設(she)置,它的格(ge)式共分(fen)為六(liu)個字段(duan)(duan),前五段(duan)(duan)是時間設(she)定段(duan)(duan),第(di)六(liu)段(duan)(duan)是要(yao)執行的命令段(duan)(duan),格(ge)式如下(xia):
minute hour day month week command
其中:
minute: 表(biao)示分鐘,可(ke)以是從0到(dao)59之間的(de)任何整數(shu)。
hour:表示小時,可以(yi)是從0到23之間的任何整數。
day:表示日期(qi),可以是從(cong)1到31之(zhi)間的任何整數(shu)。
month:表示(shi)月份,可以是(shi)從1到12之間的任何整數。
week:表示星期(qi)幾,可以是從0到7之間的任何整數,這里的0或7代表星期(qi)日。
command:要執行(xing)的(de)命令(ling),可以是系統命令(ling),也可以是自己(ji)編(bian)寫的(de)腳本文件。
在以上各個字段中(zhong),還可以使用以下特殊字符:
星(xing)號(*):代(dai)表(biao)所有可能的值,例如month字段(duan)如果是(shi)星(xing)號,則表(biao)示(shi)在滿足其它字段(duan)的制約條件后每月都執行(xing)該命令操作。
逗(dou)號(hao)(,):可以用逗(dou)號(hao)隔開(kai)的值指(zhi)定一個列(lie)表范圍(wei),例如,“1,2,5,7,8,9”
中杠(gang)(gang)(-):可以用整數之間(jian)的中杠(gang)(gang)表(biao)示一(yi)個整數范圍,例(li)如“2-6”表(biao)示“2,3,4,5,6”
正(zheng)斜(xie)(xie)線(xian)(/):可(ke)以(yi)用正(zheng)斜(xie)(xie)線(xian)指定時(shi)(shi)間(jian)的間(jian)隔(ge)頻率(lv),例如(ru)“0-23/2”表(biao)示(shi)每(mei)兩小時(shi)(shi)執(zhi)(zhi)行一(yi)次(ci)。同(tong)時(shi)(shi)正(zheng)斜(xie)(xie)線(xian)可(ke)以(yi)和星(xing)號一(yi)起使用,例如(ru)*/10,如(ru)果用在(zai)minute字(zi)段(duan),表(biao)示(shi)每(mei)十分(fen)鐘執(zhi)(zhi)行一(yi)次(ci)。
二、crond服務
安(an)裝(zhuang)crontab:
yum install crontabs
服務操作(zuo)說明:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服(fu)務
/sbin/service crond restart //重(zhong)啟服務(wu)
/sbin/service crond reload //重(zhong)新載入(ru)配置(zhi)
查看crontab服務狀態:
service crond status
手(shou)動啟動crontab服(fu)務:
service crond start
查看crontab服務是否已設(she)置為(wei)開機啟動,執行命令:
ntsysv
加入開機(ji)自動(dong)啟(qi)動(dong):
chkconfig –level 35 crond on
三(san)、crontab命令(ling)詳解(jie)
1.命令格式:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
2.命令功能:
通過crontab 命令,我們可以在固(gu)定的(de)(de)間(jian)(jian)隔(ge)時(shi)間(jian)(jian)執行指定的(de)(de)系統指令或 shell script腳本。時(shi)間(jian)(jian)間(jian)(jian)隔(ge)的(de)(de)單位可以是分(fen)鐘、小(xiao)時(shi)、日、月、周及以上的(de)(de)任(ren)意組(zu)合。這個命令非常設合周期性的(de)(de)日志分(fen)析或數(shu)據備份等工(gong)作(zuo)。
3.命令(ling)參數:
-u user:用(yong)來(lai)設定(ding)某(mou)個用(yong)戶(hu)的crontab服務,例如,“-u ixdba”表示設定(ding)ixdba用(yong)戶(hu)的crontab服務,此參數一般有root用(yong)戶(hu)來(lai)運行。
file:file是命(ming)令(ling)文(wen)件的名字,表(biao)示將(jiang)file做為crontab的任務列(lie)表(biao)文(wen)件并(bing)載(zai)(zai)入(ru)crontab。如果在命(ming)令(ling)行中沒有指定這個文(wen)件,crontab命(ming)令(ling)將(jiang)接受標準輸入(ru)(鍵盤)上鍵入(ru)的命(ming)令(ling),并(bing)將(jiang)它們載(zai)(zai)入(ru)crontab。
-e:編輯某個用戶的crontab文(wen)件(jian)內容(rong)。如果不指定用戶,則表示編輯當前(qian)用戶的crontab文(wen)件(jian)。
-l:顯示(shi)(shi)某個用戶的(de)crontab文件內(nei)容,如果不指定用戶,則表示(shi)(shi)顯示(shi)(shi)當(dang)前(qian)用戶的(de)crontab文件內(nei)容。
-r:從(cong)/var/spool/cron目錄中(zhong)刪除(chu)某個用戶的crontab文件,如果(guo)不指定用戶,則默認刪除(chu)當前用戶的crontab文件。
-i:在(zai)刪除用戶的crontab文件時給確認提(ti)示。
4.常用方法:
1). 創建一個新的crontab文(wen)件
在(zai)(zai)考慮向cron進程(cheng)提交一(yi)個(ge)crontab文(wen)件之前(qian),首(shou)先要做的(de)一(yi)件事情(qing)就是(shi)設(she)置環境變量EDITOR。cron進程(cheng)根(gen)據(ju)它來確定使(shi)用哪個(ge)編(bian)輯器編(bian)輯crontab文(wen)件。9 9 %的(de)UNIX和LINUX用戶都使(shi)用vi,如果你(ni)也(ye)是(shi)這(zhe)樣,那么你(ni)就編(bian)輯$ HOME目錄(lu)下的(de). profile文(wen)件,在(zai)(zai)其中加入這(zhe)樣一(yi)行(xing):
EDITOR=vi; export EDITOR
然后保存并(bing)退(tui)出。不妨創建一個名為(wei)<user> cron的(de)(de)文(wen)件,其中(zhong)<user>是用戶名,例如, davecron。在該(gai)文(wen)件中(zhong)加入(ru)如下的(de)(de)內容(rong)。
# (put your own initials here)echo the date to the console every
# 15minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
保存(cun)并退出。確(que)信前面5個域用(yong)空格分隔。
在上面的(de)(de)(de)例(li)子中,系統(tong)將(jiang)每隔1 5分鐘向控制(zhi)臺(tai)輸出(chu)一(yi)次(ci)當前時間(jian)。如(ru)果系統(tong)崩潰或掛(gua)起,從最后(hou)所顯示的(de)(de)(de)時間(jian)就可以(yi)一(yi)眼看(kan)出(chu)系統(tong)是什(shen)么時間(jian)停止(zhi)工作的(de)(de)(de)。在有些系統(tong)中,用tty1來表示控制(zhi)臺(tai),可以(yi)根(gen)據實際(ji)情況對(dui)上面的(de)(de)(de)例(li)子進行相(xiang)應的(de)(de)(de)修(xiu)改。為了(le)提交你剛(gang)剛(gang)創建的(de)(de)(de)crontab文件,可以(yi)把(ba)這個新創建的(de)(de)(de)文件作為cron命令(ling)的(de)(de)(de)參數(shu):
$ crontab davecron
現在該(gai)文(wen)件已經提交給cron進程(cheng),它將每(mei)隔1 5分鐘運行一次。
同時(shi),新創建文(wen)件(jian)的一個副本已經被放在/var/spool/cron目錄中(zhong),文(wen)件(jian)名就是用戶名(即dave)。
2). 列出crontab文件
為(wei)了列出crontab文件,可以用:
$ crontab -l
0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1
你將會(hui)看到(dao)和上(shang)面(mian)類似的內容(rong)。可以(yi)使(shi)用這種(zhong)方(fang)法在$ H O M E目錄中對crontab文(wen)件做一備份(fen):
$ crontab -l > $HOME/mycron
這樣,一旦不小心誤刪了crontab文件,可以用(yong)上一節所講(jiang)述的方法迅速(su)恢(hui)復。
3). 編(bian)輯(ji)crontab文件
如果希望添(tian)加(jia)、刪(shan)除或編(bian)輯(ji)crontab文件中(zhong)的條目(mu),而E D I TO R環境(jing)變量又設(she)置為(wei)v i,那么就可(ke)以用v i來編(bian)輯(ji)crontab文件,相應的命令為(wei):
$ crontab -e
可以像使用v i編(bian)輯其(qi)他任何文(wen)件(jian)那樣修改crontab文(wen)件(jian)并退出(chu)。如果修改了某些條目(mu)(mu)或添加了新的(de)(de)條目(mu)(mu),那么在保存該文(wen)件(jian)時, c r o n會(hui)對其(qi)進(jin)行必(bi)要的(de)(de)完整性檢查(cha)。如果其(qi)中的(de)(de)某個域(yu)出(chu)現了超出(chu)允許范圍的(de)(de)值,它會(hui)提示你。
我們在編輯crontab文(wen)件時,沒準會(hui)加入新的條目。例如,加入下面的一條:
# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;
現在保(bao)存并退出。最好(hao)在crontab文件的每一(yi)個條(tiao)(tiao)目之(zhi)上加(jia)入一(yi)條(tiao)(tiao)注釋,這(zhe)樣就可以知(zhi)(zhi)道它(ta)的功(gong)能、運(yun)行時間,更為重要的是,知(zhi)(zhi)道這(zhe)是哪(na)位用戶的作(zuo)業(ye)。
現在(zai)讓我(wo)們使用前面講過的(de)crontab -l命令列出它(ta)的(de)全(quan)部信(xin)息:
$ crontab -l
# (crondave installed on Tue May 4 13:07:43 1999)
# DT:ech the date to the console every 30 minites
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;
4). 刪除crontab文(wen)件
要刪除crontab文件,可以用:
$ crontab -r
5). 恢復丟失的crontab文件
如(ru)果不(bu)小心(xin)誤(wu)刪了crontab文件,假設你在自己的$ H O M E目錄下(xia)還(huan)有一(yi)個備份,那么可以(yi)將其拷(kao)貝到/var/spool/cron/<username>,其中<username>是用戶名。如(ru)果由于權限問題無法完成拷(kao)貝,可以(yi)用:
$ crontab <filename>
其中,<filename>是(shi)你在(zai)$ H O M E目錄(lu)中副本的文(wen)件名。
我建議你在自己的(de)$ H O M E目錄(lu)中保存一個該文(wen)(wen)件(jian)(jian)的(de)副(fu)本。我就(jiu)有(you)(you)過(guo)類似(si)的(de)經(jing)歷,有(you)(you)數(shu)次誤刪了(le)crontab文(wen)(wen)件(jian)(jian)(因為r鍵(jian)(jian)緊(jin)挨在e鍵(jian)(jian)的(de)右邊)。這(zhe)就(jiu)是為什么有(you)(you)些系統文(wen)(wen)檔(dang)建議不要直(zhi)接編輯crontab文(wen)(wen)件(jian)(jian),而是編輯該文(wen)(wen)件(jian)(jian)的(de)一個副(fu)本,然(ran)后重(zhong)新提交新的(de)文(wen)(wen)件(jian)(jian)。
有(you)些(xie)crontab的變(bian)體(ti)有(you)些(xie)怪異,所(suo)以在使用crontab命令時要格外小(xiao)心。如果遺漏了任何選項,crontab可能會打開一個空文件,或者看起來像是個空文件。這(zhe)時敲delete鍵退出,不(bu)要按<Ctrl-D>,否則你(ni)將丟失crontab文件。
5.使用實例
實例(li)1:每1分鐘執行(xing)一次command
命(ming)令(ling):
* * * * * command
實例2:每(mei)小時的第3和(he)第15分鐘(zhong)執行(xing)
命令:
3,15 * * * * command
實(shi)例(li)3:在上午8點(dian)到11點(dian)的第(di)3和第(di)15分(fen)鐘執行
命令:
3,15 8-11 * * * command
實例4:每隔兩天的上午8點(dian)到11點(dian)的第3和第15分鐘執行
命令:
3,15 8-11 */2 * * command
實(shi)例5:每個星期一的上午8點到(dao)11點的第(di)3和(he)第(di)15分鐘執行(xing)
命令:
3,15 8-11 * * 1 command
實例6:每晚的21:30重(zhong)啟(qi)smb
命令(ling):
30 21 * * * /etc/init.d/smb restart
實例7:每月1、10、22日的4 : 45重(zhong)啟(qi)smb
命(ming)令:
45 4 1,10,22 * * /etc/init.d/smb restart
實例8:每周(zhou)六、周(zhou)日的1 : 10重啟(qi)smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart
實例9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb
命(ming)令:
0,30 18-23 * * * /etc/init.d/smb restart
實例10:每(mei)星期六(liu)的晚(wan)上11 : 00 pm重啟smb
命令:
0 23 * * 6 /etc/init.d/smb restart
實例11:每一小時重啟smb
命(ming)令:
* */1 * * * /etc/init.d/smb restart
實例12:晚上11點到早(zao)上7點之間,每(mei)隔一(yi)小(xiao)時重啟smb
命令(ling):
* 23-7/1 * * * /etc/init.d/smb restart
實例13:每(mei)月(yue)的4號與每(mei)周(zhou)一到周(zhou)三的11點重啟(qi)smb
命令:
0 11 4 * mon-wed /etc/init.d/smb restart
實例14:一月一號的4點重啟smb
命令:
0 4 1 jan * /etc/init.d/smb restart
實例(li)15:每小時執行(xing)/etc/cron.hourly目(mu)錄內(nei)的腳本
命令:
01 * * * * root run-parts /etc/cron.hourly
說明:
run-parts這個(ge)(ge)參數了,如果去掉這個(ge)(ge)參數的話,后面就可以寫(xie)要運行的某個(ge)(ge)腳本名,而不是目錄名了
四、使用注意事項
1. 注意環(huan)境變量問題
有時我(wo)們創建了一個(ge)(ge)crontab,但(dan)是(shi)這個(ge)(ge)任(ren)務卻無法自動執(zhi)行(xing),而手動執(zhi)行(xing)這個(ge)(ge)任(ren)務卻沒有問題,這種情況一般是(shi)由(you)于在(zai)crontab文件中沒有配(pei)置環境變(bian)量引起的。
在(zai)crontab文件(jian)中定(ding)義多(duo)個調度(du)任(ren)務(wu)時,需(xu)(xu)要特別注意的(de)(de)一(yi)個問題就(jiu)是環(huan)(huan)境(jing)(jing)變量(liang)(liang)的(de)(de)設置,因為我們(men)手動(dong)執(zhi)行(xing)(xing)某個任(ren)務(wu)時,是在(zai)當前shell環(huan)(huan)境(jing)(jing)下進行(xing)(xing)的(de)(de),程(cheng)序當然能(neng)找到環(huan)(huan)境(jing)(jing)變量(liang)(liang),而(er)系統自動(dong)執(zhi)行(xing)(xing)任(ren)務(wu)調度(du)時,是不會加載(zai)任(ren)何環(huan)(huan)境(jing)(jing)變量(liang)(liang)的(de)(de),因此,就(jiu)需(xu)(xu)要在(zai)crontab文件(jian)中指定(ding)任(ren)務(wu)運行(xing)(xing)所需(xu)(xu)的(de)(de)所有(you)環(huan)(huan)境(jing)(jing)變量(liang)(liang),這(zhe)樣,系統執(zhi)行(xing)(xing)任(ren)務(wu)調度(du)時就(jiu)沒有(you)問題了。
不(bu)(bu)要(yao)假定cron知道所需要(yao)的(de)特殊環(huan)境,它其實并不(bu)(bu)知道。所以(yi)你要(yao)保(bao)證在shelll腳本中提供(gong)所有必要(yao)的(de)路徑和環(huan)境變(bian)量(liang),除(chu)了一些自動設置的(de)全局變(bian)量(liang)。所以(yi)注意如(ru)下(xia)3點:
1)腳本中(zhong)涉及文(wen)件路徑時寫全(quan)局路徑;
2)腳(jiao)本執行要用到java或其他環境變(bian)量時(shi),通過(guo)source命令引入環境變(bian)量,如(ru):
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)當(dang)手動(dong)執行腳本OK,但是crontab死(si)活不執行時(shi)。這(zhe)時(shi)必須大膽懷(huai)疑是環境變(bian)量惹的禍,并(bing)可以嘗試在crontab中(zhong)直接(jie)引入(ru)環境變(bian)量解決(jue)問題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
2. 注意清理系統用(yong)戶的(de)郵件(jian)日志(zhi)
每(mei)條任(ren)務(wu)調度執(zhi)行(xing)(xing)完畢(bi),系統(tong)都(dou)會將(jiang)任(ren)務(wu)輸出信息通過電子郵件的形(xing)式發送(song)給當(dang)前系統(tong)用(yong)戶,這樣日積月累,日志信息會非常大,可能會影(ying)響系統(tong)的正常運行(xing)(xing),因此,將(jiang)每(mei)條任(ren)務(wu)進行(xing)(xing)重定向處理非常重要。
例如,可以(yi)在crontab文件中設置如下形式,忽略日(ri)志(zhi)輸出:
0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
“/dev/null 2>&1”表示(shi)先(xian)將(jiang)標(biao)(biao)準(zhun)輸(shu)出(chu)重(zhong)定(ding)向(xiang)到(dao)/dev/null,然后將(jiang)標(biao)(biao)準(zhun)錯(cuo)誤重(zhong)定(ding)向(xiang)到(dao)標(biao)(biao)準(zhun)輸(shu)出(chu),由(you)于(yu)標(biao)(biao)準(zhun)輸(shu)出(chu)已經重(zhong)定(ding)向(xiang)到(dao)了/dev/null,因此(ci)標(biao)(biao)準(zhun)錯(cuo)誤也會(hui)重(zhong)定(ding)向(xiang)到(dao)/dev/null,這樣日志輸(shu)出(chu)問題就解(jie)決了。
3. 系統級(ji)任(ren)務(wu)調(diao)度(du)與(yu)用(yong)戶級(ji)任(ren)務(wu)調(diao)度(du)
系(xi)統級(ji)(ji)任(ren)務(wu)(wu)調(diao)(diao)度主(zhu)要完成(cheng)系(xi)統的一(yi)些維護操(cao)作(zuo),用戶(hu)(hu)級(ji)(ji)任(ren)務(wu)(wu)調(diao)(diao)度主(zhu)要完成(cheng)用戶(hu)(hu)自(zi)定(ding)義的一(yi)些任(ren)務(wu)(wu),可(ke)以將用戶(hu)(hu)級(ji)(ji)任(ren)務(wu)(wu)調(diao)(diao)度放到系(xi)統級(ji)(ji)任(ren)務(wu)(wu)調(diao)(diao)度來完成(cheng)(不建議(yi)這么做(zuo)),但(dan)是反過來卻(que)不行,root用戶(hu)(hu)的任(ren)務(wu)(wu)調(diao)(diao)度操(cao)作(zuo)可(ke)以通(tong)過“crontab –uroot –e”來設置(zhi),也可(ke)以將調(diao)(diao)度任(ren)務(wu)(wu)直(zhi)接寫入(ru)/etc/crontab文件,需要注意的是,如果要定(ding)義一(yi)個(ge)定(ding)時重啟系(xi)統的任(ren)務(wu)(wu),就必須將任(ren)務(wu)(wu)放到/etc/crontab文件,即使在(zai)root用戶(hu)(hu)下創(chuang)建一(yi)個(ge)定(ding)時重啟系(xi)統的任(ren)務(wu)(wu)也是無(wu)效的。
4. 其(qi)他注意事項(xiang)
新創(chuang)建(jian)的cron job,不會馬上執行(xing),至少(shao)要過(guo)2分鐘(zhong)才執行(xing)。如(ru)果重(zhong)啟cron則馬上執行(xing)。
當crontab突然失效(xiao)時,可以(yi)嘗試/etc/init.d/crond restart解(jie)決問題。或(huo)者查看日(ri)志看某個job有沒有執(zhi)行/報錯tail -f /var/log/cron。
千萬別(bie)亂(luan)運(yun)行crontab -r。它從Crontab目錄(/var/spool/cron)中刪(shan)除(chu)用(yong)(yong)戶(hu)的Crontab文件(jian)。刪(shan)除(chu)了該用(yong)(yong)戶(hu)的所有crontab都沒(mei)了。
在(zai)(zai)crontab中%是(shi)有特殊含(han)義的,表示換行的意思(si)。如果(guo)要用的話必須(xu)進行轉義\%,如經常(chang)用的date ‘+%Y%m%d’在(zai)(zai)crontab里(li)是(shi)不會執行的,應該換成date ‘+\%Y\%m\%d’。
關注 熵減黑客 ,一起學習成長
