例行性任務(wù)(crontab)

系統(tǒng)經(jīng)常會主動執(zhí)行一些任務(wù),這些任務(wù)可能又分為“單一”工作與“循環(huán)”工作。

1、什么是例行性工作

有的工作是例行性的,有的工作是臨時發(fā)生的。

如果計算機系統(tǒng)能夠主動通知我某些事情的話,那不就輕松很多!

1.1、Linux工作調(diào)度的種類:at,cron

兩種工作調(diào)度的方式:

一種是例行性的,就是每隔一定的周期要來辦的事項;

一種是突發(fā)性的,就是這次做完以后就沒有的那一種。

at:at是個可以處理僅執(zhí)行一次就結(jié)束調(diào)度的命令,不過要執(zhí)行at時,必須要有atd這個服務(wù)的支持才行;

crontab:crontab這個命令所設(shè)置的工作將會循環(huán)一直執(zhí)行下去??裳h(huán)的時間為分鐘、小時、每周、每月或每年等。crontab處理可以使用命令執(zhí)行外,也可編輯/etc/crontab來支持。至于讓crontab可以生效的服務(wù)則是crond這個服務(wù)。

1.2、Linux上常見的例行性工作

基本上Linux系統(tǒng)常見的例行性任務(wù)有:

進行日志文件的輪替(log rotate);

日志文件分析logwatch的任務(wù);

新建locate的數(shù)據(jù)庫;

whatis數(shù)據(jù)庫的建立;

RPM軟件日志文件的新建;

刪除臨時文件;

與網(wǎng)絡(luò)服務(wù)有關(guān)的分析行為;



2、僅執(zhí)行一次的工作調(diào)度

單一工作調(diào)度的運作,at這個命令。

2.1、atd的啟動與at運行方式

atd這個服務(wù)調(diào)度at

service atd start

at的運行方式:

事實上,我們使用at這個命令來生成所要運行的工作,并將這個工作以文本的方式寫入/var/spool/at目錄內(nèi),該工作便能等待atd這個服務(wù)的取用并執(zhí)行了。

不過,并不是所有的人都可以進行at工作調(diào)度。所以,除非是你認可的賬戶,否則先不要讓他們使用at。

我們可以利用/etc/at.allow和/etc/at.deny這兩個文件來進行at的使用限制。

2.2、實際運行單一工作調(diào)度

at命令語法

at這個命令最重要的地方在于時間的指定, now + x minutes也是不錯的方法。

事實上,當我們使用at時會進入一個at shell的環(huán)境來讓用戶執(zhí)行工作命令,此時,建議你最好使用絕對路徑來執(zhí)行你的命令。

at 的執(zhí)行與終端機環(huán)境無關(guān),而所有的standard output/standard error output都會傳送到執(zhí)行者的mailbox里面去,不是輸出在屏幕上。

還要注意的是,at執(zhí)行過后并沒有任何輸出信息,如果你想要知道命令執(zhí)行沒有,可以發(fā)送一封郵件告知你。

at還有一個很棒的優(yōu)點,那就是“后臺執(zhí)行”的功能!

脫機繼續(xù)工作的任務(wù),由于在 at 工作調(diào)度的使用上,系統(tǒng)會將該項at工作獨立出你的bash環(huán)境中,直接交給系統(tǒng)的atd程序來接管,因此,當你執(zhí)行了at的工作之后就可以立刻脫機了,剩下的工作就完全交給Linux管理即可。

at的工作管理:

利用atp來查詢,利用atrm來刪除。

atp和atrm命令

如果你是在一個非常忙碌的系統(tǒng)下運行at,能不能指定你的工作在系統(tǒng)較閑的時候才進行呢?可以的,那就是用batch命令吧!

batch:系統(tǒng)有空時才進行的后臺任務(wù)

其實batch是利用at來進行命令的執(zhí)行,只是加入了一些控制參數(shù)而已。

這個batch神奇的地方在于:它會在CPU工作負載小于0.8的時候,才進行你執(zhí)行的工作任務(wù)。

負載的意思是:CPU在單一時間點所負責的工作數(shù)量,不是CPU的使用率。舉例來說,如果我有一個程序它需要一直使用CPU的運算功能,那么此時CPU的使用率可能到達100%,但是CPU的工作負載則是趨近于1,因為CPU僅僅負責了一個工作。如果同時執(zhí)行這樣的程序兩個,CPU的使用率還是100%,但CPU的負載則變成了2。當CPU的工作負載越大,代表CPU必須要在不同的工作之間進行頻繁的工作切換。

batch命令的用法

其實batch也是利用atp和atrm來管理的。



3、循環(huán)執(zhí)行的例行性工作調(diào)度

循環(huán)執(zhí)行的例行性工作調(diào)度則是由cron(crond)這個系統(tǒng)服務(wù)來控制的。另外,用戶也可以進行例行性工作調(diào)度,Linux提供給用戶控制例行性工作調(diào)度的命令是(crontab)。

與at一樣,我們也可以限制使用crontab的用戶賬戶。在這兩個文件當中,/etc/cron.allow和/etc/cron.deny。

當用戶使用crontab這個命令來新建工作調(diào)度之后,該項工作就會被記錄到/var/spool/cron里面去了,而且是以賬號來作為判別的。

crontab命令
代表意義
特殊字符

注意,crontab -r 命令是刪除所有的crontab內(nèi)容。

3.2、系統(tǒng)的配置文件:/etc/crontab

這個crontab -e 主要是針對cron來設(shè)計的,如果是系統(tǒng)的例行性任務(wù)時,就需要編輯/etc/crontab這個文件。

基本上,cron這個服務(wù)的最低檢查限制的是“分鐘”,所以cron會每分鐘去讀取一次/etc/crontab與/var/spool/cron里面的數(shù)據(jù)內(nèi)容。因此,只要你編輯完/etc/crontab這個文件,并且將它保存之后,那么cron的設(shè)置就自動會來執(zhí)行。由于crontab是讀取到內(nèi)存中的,所以在你修改完/etc/crontab之后,可能并不會馬上執(zhí)行,這個時候請重啟crond這個服務(wù)吧。

/etc/crontab

/etc/crontab這個文件里面支持兩種執(zhí)行命令的方式,一種是直接執(zhí)行命令,一種則是以目錄來規(guī)劃。

3.3、一些注意事項

資源分配不均問題;

取消不要的輸出選項;

安全的檢驗;

周與日、月不可同時并存。


4、可喚醒停機期間的工作任務(wù)

如果你的Linux主機24小時全天、全年無休的服務(wù)器之用,那么你只要有atd與crond這兩個服務(wù)來管理你的例行性工作調(diào)度即可。如果你的主機并非24小時開機,那么你的某些例行性任務(wù)可能就無法運行,此時就得要用到anacron這個工具了。

4.1、什么是anacron

anacron并不是用來替代crontab的,anacron存在的目的就在于我們上頭提到的,處理非24小時一直啟動的Linux系統(tǒng)的crontab的執(zhí)行。所以annacron并不能指定何時執(zhí)行某項任務(wù),而是以天為單位或者是在開機后立刻進行anacron的操作,它會去檢測停機期間應(yīng)該進行但是并沒有進行的crontab任務(wù),并將該任務(wù)執(zhí)行一遍,然后anacron就會自動停止。

anacron讀取的時間記錄文件(timestamp)了!anacron會去分析現(xiàn)在的時間與時間記錄文件所記載的上次執(zhí)行anacron的時間,兩者比較后若發(fā)現(xiàn)有區(qū)別,那就是在某些時刻沒有進行crontab。此時anacron就會開始執(zhí)行未進行的crontab任務(wù)了。

所以anacron其實也是通過crontab來運行的,因此anacron運行的時間通常有兩個,一個是系統(tǒng)開機期間運行,一個是寫入crontab的調(diào)度中,這樣才能在特定時間分析系統(tǒng)未進行的crontab工作。

anacron其實是一個程序并非一個服務(wù)。

anacron命令
/etc/crontab

如果 anacron 執(zhí)行 cron.daily時,它是這樣運行的:

1,由/etc/anacrontab分析到cron.daily這項工作名稱的天數(shù)為1天;

2,由/var/spool/anacron/cron.daily取出最近一次執(zhí)行anacron的時間戳;

3,由上個步驟與目前的時間比較,若差異天數(shù)未1天以上(含1天),就準備進行命令;

4,若準備進行命令,根據(jù)/etc/anacrontab的設(shè)置將延遲5分鐘;

5,延遲時間過后,開始執(zhí)行后續(xù)命令,即“run-parts /etc/cron.daily”這串命令;

6,執(zhí)行完畢后,anacron程序結(jié)束。

所以說,時間戳是非常重要的。anacron是通過該記錄與目前的時間差異,了解到是否應(yīng)該要進行某項任務(wù)的工作。

現(xiàn)在知道為甚么隔了一陣才將Linux開機,但是開機后一段時間內(nèi)系統(tǒng)很忙碌,那就是因為anacron正在執(zhí)行過去crontab未進行的各項工作制度。

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Linux定時任務(wù)Crontab命令詳解 linux 系統(tǒng)則是由 cron (crond) 這個系統(tǒng)服務(wù)來控制的。...
    孫燕超閱讀 1,898評論 0 4
  • 前一天學習了 at 命令是針對僅運行一次的任務(wù),循環(huán)運行的例行性計劃任務(wù),linux系統(tǒng)則是由 cron (cro...
    Zcclucky閱讀 622評論 0 0
  • Linux 系統(tǒng)提供了使用者控制計劃任務(wù)的命令 :crontab 命令。 一、crond簡介 crond是linu...
    happeace閱讀 1,881評論 0 53
  • 為當前用戶創(chuàng)建cron服務(wù) 1. 鍵入 crontab -e 編輯crontab服務(wù)文件 例如 文件內(nèi)容如下: *...
    jeckHao閱讀 2,013評論 0 0
  • 馬路無所事事的躺著 從沒有跟路燈說過十月什么話 它生出些句號 青苔不綠 夕陽不來 夏至未離 金秋未黃 筆尖發(fā)病 心...
    禁止吃糖閱讀 327評論 4 3

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