4.4 計劃任務(wù)服務(wù)程序

2023-05-11 14:59 更新

經(jīng)驗豐富的系統(tǒng)運(yùn)維工程師可以使得Linux在無需人為介入的情況下,在指定的時間段自動啟用或停止某些服務(wù)或命令,從而實(shí)現(xiàn)運(yùn)維的自動化。盡管我們現(xiàn)在已經(jīng)有了功能彪悍的腳本程序來執(zhí)行一些批處理工作,但是,如果仍然需要在每天凌晨兩點(diǎn)敲擊鍵盤回車鍵來執(zhí)行這個腳本程序,這簡直太痛苦了(當(dāng)然,也可以訓(xùn)練您的小貓在半夜按下回車鍵)。接下來,劉遄老師將向大家講解如何設(shè)置服務(wù)器的計劃任務(wù)服務(wù),把周期性、規(guī)律性的工作交給系統(tǒng)自動完成。

計劃任務(wù)分為一次性計劃任務(wù)與長期性計劃任務(wù),大家可以按照如下方式理解。

一次性計劃任務(wù):今晚11點(diǎn)30分開啟網(wǎng)站服務(wù)。

長期性計劃任務(wù):每周一的凌晨3點(diǎn)25分把/home/wwwroot目錄打包備份為backup.tar.gz。

顧名思義,一次性計劃任務(wù)只執(zhí)行一次,一般用于滿足臨時的工作需求。我們可以用at命令實(shí)現(xiàn)這種功能,只需要寫成“at 時間”的形式就可以。如果想要查看已設(shè)置好但還未執(zhí)行的一次性計劃任務(wù),可以使用“at -l”命令;要想將其刪除,可以用“atrm 任務(wù)序號”。

at命令的參數(shù)及其作用

參數(shù) 作用
-f 指定包含命令的任務(wù)文件
-q 指定新任務(wù)名稱
-l 顯示待執(zhí)行任務(wù)列表
-d 刪除指定待執(zhí)行任務(wù)
-m 任務(wù)執(zhí)行后給用戶發(fā)郵件

在使用at命令來設(shè)置一次性計劃任務(wù)時,默認(rèn)采用的是交互式方法。例如,使用下述命令將系統(tǒng)設(shè)置為在今晚23:30分自動重啟網(wǎng)站服務(wù)。

    [root@linuxprobe ~]# at 23:30
    at > systemctl restart httpd
    at > 此處請同時按下Ctrl+d來結(jié)束編寫計劃任務(wù)
    job 3 at Mon Apr 27 23:30:00 2015
    [root@linuxprobe ~]# at -l
    3 Mon Apr 27 23:30:00 2016 a root

如果讀者想挑戰(zhàn)一下難度更大但簡捷性更高的方式,可以把前面學(xué)習(xí)的管道符(任意門)放到兩條命令之間,讓at命令接收前面echo命令的輸出信息,以達(dá)到通過非交互式的方式創(chuàng)建計劃一次性任務(wù)的目的。

    [root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
    job 4 at Mon Apr 27 23:30:00 2015
    [root@linuxprobe ~]# at -l
    3 Mon Apr 27 23:30:00 2016 a root
    4 Mon Apr 27 23:30:00 2016 a root

如果我們不小心設(shè)置了兩個一次性計劃任務(wù),可以使用下面的命令輕松刪除其中一個:

    [root@linuxprobe ~]# atrm 3
    [root@linuxprobe ~]# at -l
    4 Mon Apr 27 23:30:00 2016 a root

如果我們希望Linux系統(tǒng)能夠周期性地、有規(guī)律地執(zhí)行某些具體的任務(wù),那么Linux系統(tǒng)中默認(rèn)啟用的crond服務(wù)簡直再適合不過了。創(chuàng)建、編輯計劃任務(wù)的命令為“crontab -e”,查看當(dāng)前計劃任務(wù)的命令為“crontab -l”,刪除某條計劃任務(wù)的命令為“crontab -r”。另外,如果您是以管理員的身份登錄的系統(tǒng),還可以在crontab命令中加上-u參數(shù)來編輯他人的計劃任務(wù)。

在正式部署計劃任務(wù)前,請先跟劉遄老師念一下口訣“分、時、日、月、星期 命令”。這是使用crond服務(wù)設(shè)置任務(wù)的參數(shù)格式(其格式見表4-6)。需要注意的是,如果有些字段沒有設(shè)置,則需要使用星號(*)占位,如圖4-23所示。

圖4-23 使用crond設(shè)置任務(wù)的參數(shù)格式

表4-6 使用crond設(shè)置任務(wù)的參數(shù)字段說明

字段 說明
分鐘 取值為0~59的整數(shù)
小時 取值為0~23的任意整數(shù)
日期 取值為1~31的任意整數(shù)
月份 取值為1~12的任意整數(shù)
星期 取值為0~7的任意整數(shù),其中0與7均為星期日
命令 要執(zhí)行的命令或程序腳本

假設(shè)在每周一、三、五的凌晨3點(diǎn)25分,都需要使用tar命令把某個網(wǎng)站的數(shù)據(jù)目錄進(jìn)行打包處理,使其作為一個備份文件。我們可以使用crontab -e命令來創(chuàng)建計劃任務(wù)。為自己創(chuàng)建計劃任務(wù)無需使用-u參數(shù),具體的實(shí)現(xiàn)效果的參數(shù)如crontab -l命令結(jié)果所示:

    [root@linuxprobe ~]# crontab -e
    no crontab for root - using an empty one
    crontab: installing new crontab
    [root@linuxprobe ~]# crontab -l
    25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

需要說明的是,除了用逗號(,)來分別表示多個時間段,例如“8,9,12”表示8月、9月和12月。還可以用減號(-)來表示一段連續(xù)的時間周期(例如字段“日”的取值為“12-15”,則表示每月的12~15日)。以及用除號(/)表示執(zhí)行任務(wù)的間隔時間(例如“*/2”表示每隔2分鐘執(zhí)行一次任務(wù))。

如果在crond服務(wù)中需要同時包含多條計劃任務(wù)的命令語句,應(yīng)每行僅寫一條。例如我們再添加一條計劃任務(wù),它的功能是每周一至周五的凌晨1點(diǎn)鐘自動清空/tmp目錄內(nèi)的所有文件。尤其需要注意的是,在crond服務(wù)的計劃任務(wù)參數(shù)中,所有命令一定要用絕對路徑的方式來寫,如果不知道絕對路徑,請用whereis命令進(jìn)行查詢,rm命令路徑為下面輸出信息中加粗部分。

    [root@linuxprobe ~]# whereis rm
    rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
    [root@linuxprobe ~]# crontab -e
    crontab: installing new crontab
    [root@linuxprobe ~]# crontab -l
    25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
    0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

在本節(jié)最后,劉遄老師再來啰嗦幾句在工作中使用計劃服務(wù)的注意事項。

在crond服務(wù)的配置參數(shù)中,可以像Shell腳本那樣以#號開頭寫上注釋信息,這樣在日后回顧這段命令代碼時可以快速了解其功能、需求以及編寫人員等重要信息。

計劃任務(wù)中的“分”字段必須有數(shù)值,絕對不能為空或是*號,而“日”和“星期”字段不能同時使用,否則就會發(fā)生沖突。

最后再啰嗦一句,想必讀者也已經(jīng)發(fā)現(xiàn)了,諸如crond在內(nèi)的很多服務(wù)默認(rèn)調(diào)用的是Vim編輯器,相信大家現(xiàn)在能進(jìn)一步體會到在Linux系統(tǒng)中掌握Vim文本編輯器的好處了吧。所以請大家一定要在徹底掌握Vim編碼器之后再學(xué)習(xí)下一章。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號