Linux計劃任務(wù)(1)

01 何為計劃任務(wù)


計劃任務(wù),顧名思義:計劃在未來某個時間點要執(zhí)行的任務(wù),也可稱為定時任務(wù)。有一次性的計劃任務(wù),也有周期性的計劃任務(wù)。

一次性的計劃任務(wù)就相當(dāng)于待辦,如今天下午三點開會,那么它只會在今天下午三點提醒一次;周期性的計劃任務(wù)就和我們手機鬧鐘一樣,如設(shè)置工作日7點整的鬧鐘,那么每個工作日7點整鬧鐘都會準(zhǔn)時響。

但我們平常說的計劃任務(wù)大多是指周期性的計劃任務(wù),用來執(zhí)行那些需要重復(fù)執(zhí)行的命令和工作,如定時重啟、打包、清理日志等等,大大滿足了日常運維需求。

在Linux中,一次性的計劃任務(wù)由at和batch命令完成;而周期性的計劃任務(wù)則涉及到兩個服務(wù),分別是crond和anacron。今天我們要講的是crond服務(wù),對應(yīng)的命令是crontab命令。

crond 服務(wù)是 Linux 下用來周期地執(zhí)行某種任務(wù)或等待處理某些事件的一個守護進程,和 Windows 中的計劃任務(wù)有些類似。在安裝完操作系統(tǒng)后,默認(rèn)會安裝 crond 服務(wù)工具,且 crond 服務(wù)默認(rèn)就是自啟動的。crond 服務(wù)每分鐘會定期檢查是否有要執(zhí)行的任務(wù),如果有,則會自動執(zhí)行該任務(wù)。

02 crond配置文件


Linux下的任務(wù)調(diào)度分為兩類,系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度,其對應(yīng)的配置文件和目錄也各不相同。

系統(tǒng)任務(wù)調(diào)度

系統(tǒng)任務(wù)調(diào)度,系統(tǒng)周期性要執(zhí)行的動作,配置文件為/etc/crontab,該配置為全局性的。

可以看到,該配置文件已經(jīng)在注釋中告訴我們,這個配置文件是系統(tǒng)層面的crontab,與其他crontab不同(即用戶任務(wù)調(diào)度),在編輯此文件和/etc/cron.d/目錄中的文件時,不必運行crontab命令。這些文件還額外具有一個用戶名字段,但其他crontab都沒有。

接著就是一些環(huán)境變量的設(shè)置。SHELL變量指定使用哪種shell,PATH變量指定系統(tǒng)執(zhí)行命令的路徑。MAILTO變量指定crond的任務(wù)執(zhí)行信息將通過郵件發(fā)給哪個用戶。HOME變量指定在執(zhí)行命令或者腳本時使用的主目錄。

系統(tǒng)計劃任務(wù)的語法比較簡單,由三部分組成。前面五個星號"*"表示時間:分時日月周;接著就是用戶名:以什么身份執(zhí)行,因為它是全局性的,所以必須指明身份;最后就是要執(zhí)行的命令command。

在上圖中,"run-parts"命令用來執(zhí)行指定目錄中的可執(zhí)行腳本,這里引生出了四個目錄,存放需要定期運行的腳本:

/etc/cron.hourly/:每小時執(zhí)行的腳本

/etc/cron.daily/:每日執(zhí)行的腳本

/etc/cron.weekly/:每周執(zhí)行的腳本

/etc/cron.monthly/:每月執(zhí)行的腳本

我們以/etc/cron.daily/目錄為例,該目錄下存放的是每日運行的可執(zhí)行腳本,其內(nèi)容就是要執(zhí)行的命令。(具備執(zhí)行權(quán)限)

另外除了/etc/crontab配置文件,我們還可以在/etc/cron.d/目錄中存放系統(tǒng)層面的crontab文件。(不具備執(zhí)行權(quán)限,注意和上面四個目錄中的文件區(qū)分)

兩者的語法一致。我們通常不會去修改/etc/crontab文件,而是去操作/etc/cron.d/目錄下的crontab文件。該目錄下的計劃任務(wù),相對"run-parts"命令涉及到的四個目錄中的計劃任務(wù),有更自由的調(diào)度。

用戶任務(wù)調(diào)度

用戶任務(wù)調(diào)度,用戶自定義的周期性動作,配置文件存放在/var/spool/cron/目錄(或子目錄/var/spool/cron/crontabs/),文件名與用戶名一致。

雖然都是crontab文件,但不能直接對其進行編輯,而是通過運行crontab命令對其進行編輯。

這里提示沒有用戶自定義的計劃任務(wù),在下面的章節(jié),我們會使用crontab命令來創(chuàng)建用戶的crontab,同時掌握其語法。

其他文件

除了以上兩種,crond服務(wù)還涉及以下目錄和文件。

/etc/cron.deny:黑名單。如果該文件存在,則其中的用戶不允許使用crontab命令

/etc/cron.allow:白名單。如果該文件存在,則只有其中的用戶允許使用crontab命令

如果兩個文件都不存在,則只有超級用戶允許使用

語法很簡單,每行一個用戶名即可。

03 crontab命令使用


crontab命令用于維護每個用戶的crontab文件,它的使用比較簡單,如下是各選項的用法,我們熟練使用前面四個選項即可。

crontab -e:編輯該用戶的crontab,指定crontab不存在時則新建

crontab -l:列出該用戶的crontab

crontab -r:刪除該用戶的crontab

crontab -u:指定要對哪個用戶的crontab進行操作

crontab -i:刪除crontab之前彈出對話框

首先是"-u"選項,在不添加該選項時,默認(rèn)是對當(dāng)前用戶的計劃任務(wù)進行操作。如下圖:當(dāng)前用戶為root,直接使用"-l"選項,提示root沒有crontab;添加"-u"選項,則列出指定用戶kali的計劃任務(wù)。(需要注意的是,只有管理員權(quán)限才能使用"-u"選項,其他用戶使用需要sudo)

由于用戶kali也沒有計劃任務(wù),所以同樣提示沒有kali的crontab。這里我們需要使用"-e"選項,為用戶kali新建計劃任務(wù)。

在新建計劃任務(wù)之前,我們需要詳細(xì)了解用戶crontab文件的語法。用戶crontab語法和系統(tǒng)crontab語法差不多,只是少了一個用戶名字段而已。command部分沒啥好講的,我們重點講時間的設(shè)置。

第五個時間字段,也就是星期字段,數(shù)字0和7均代表星期天,還可以用星期的英文來表示星期幾。另外,五個時間字段中除了可以使用數(shù)字,還可以使用如下幾個特殊字符。

星號(*):代表取值范圍內(nèi)的值(任意/每)。

逗號(,):一個列表。

中杠(-):一個范圍。

正斜線(/):間隔頻率。

下面我們舉例來理解這幾個特殊字符的使用場景。

每分鐘執(zhí)行一次命令

* * * * * command? ? (*表示任意時間,每;最小單位為每分鐘)

每天的2點整執(zhí)行一次命令

02* * * command

每個月的1號的2點整執(zhí)行一次命令

021* * command

每2分鐘執(zhí)行一次命令

*/2* * * * command ? ?(/表示時間間隔,每num執(zhí)行一次)

每小時的第2和第8分鐘時執(zhí)行一次命令

2,8* * * * command(,表示列表,在num1,num2,...的時候執(zhí)行一次)

每天2點到8點之間,每分鐘執(zhí)行一次命令

*2-8* * * command(-表示范圍,在num1到num2之間的某種條件下執(zhí)行一次)

每個月的、5和6號的、3到4點之間,每2分鐘執(zhí)行一次命令

*/23-45,6* * command ? ?(組合使用)

特殊字符可以單獨使用,也可以組合使用,篇幅關(guān)系,就不一一列舉,大家學(xué)會舉一反三。五個字段都是對時間進行操作,只是取值范圍和單位不一樣而已。

介紹了時間字段的語法,接下來我們使用"-e"選項來為用戶新建crontab。

第一次操作時,系統(tǒng)會要求我們選擇編輯器,選擇自己熟練的編輯器即可;選擇之后會進入到crontab文件編輯的界面,我們在文件中按照語法添加計劃任務(wù),保存退出即可。(這里我沒有放截圖,大家敲下命令就知道了)

再次使用"-l"選項,直接列出crontab內(nèi)容,上面的注釋為系統(tǒng)自動生成,只有最后一句是我手工添加的。需要注意的是,不同系統(tǒng),crontab命令打開的crontab文件內(nèi)容不一定相同,有的可能沒有注釋,有的第一次使用可能不需要選擇編輯器就直接進入crontab文件編輯界面了。(當(dāng)然選擇哪個編輯器也可以我們?nèi)斯づ渲茫@里不是我們要講的知識點)

查看/var/spool/cron/crontabs目錄,發(fā)現(xiàn)存在一個名為kali的crontab文件。

使用"-r"選項刪除用戶的crontab,注意該選項直接刪除crontab文件,而不是刪除其中的某條。因此刪除之后,名為kali的crontab文件將從目錄中刪除。

04 總結(jié)


計劃任務(wù)的配置文件和目錄涉及較多,以前沒接觸過的校友一時半會兒可能無法很好的吸收,大家可以帶著以下幾個問題去理解記憶。

問題1:任務(wù)調(diào)度分哪兩種?

答:系統(tǒng)任務(wù)調(diào)度、用戶任務(wù)調(diào)度

問題2:不同計劃任務(wù)的配置文件分別是?

答:系統(tǒng)/etc/crontab、用戶/var/spool/cron/*

問題3:還涉及到哪些文件和目錄?

答:

/etc/cron.d/*

/etc/cron.hourly/*

/etc/cron.daily/*

/etc/cron.weekly/*

/etc/cron.monthly/*

問題4:問題3中各目錄的區(qū)別?

答:/etc/cron.d/存放crontab文件,其他目錄存放需周期性運行的可執(zhí)行腳本

問題5:計劃任務(wù)的黑白名單是哪兩個文件?

答:/etc/cron.deny、/etc/cron.allow

計劃任務(wù)的知識如果要深講,還有很多可以講的。不過大家掌握以上五個問題+語法+crontab命令,就足夠了。如果感興趣,大家可以去查閱官方的手冊進行知識的補充。

05?免責(zé)聲明


安全小白團是幫助用戶了解信息安全技術(shù)、安全漏洞相關(guān)信息的微信公眾號。安全小白團提供的程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用,用戶將其信息做其他用途,由用戶承擔(dān)全部法律及連帶責(zé)任,安全小白團不承擔(dān)任何法律及連帶責(zé)任。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容