Linux之任務計劃 crontab

Linux之任務計劃 

 

用過windows的同學應該都知道在控制面板中有一個“任務計劃”選項,我們可以通過向導設置讓計算機在某個時間點或者開機時運行某個腳本或者批處理等等,方便我們的日常管理監視工作;同樣在Linux系統中,如果我們想在開機時就運行某個操作,可以直接將命令寫入/etc/rc.local中,該操作就會在機器開機時運行;如果把自己寫的Bash Shell腳本的名稱寫在/etc/rc.local中,開機后也會執行其操作;也就是說,在Linux啟動的最后階段,系統會執行存于rc.local中的命令;類似于windows里面的“啟動”菜單。如果想在Linux中定時去執行某些操作呢?我們可以使用at ,batch ,crontab , anacron等命令;

一、一次性執行任務命令atbatch

說白了就是任務只執行一次,就結束操作,不會循環執行其操作。

  1. 使用方式:at [-v][-q queue][-f file][-mldbv] TIME

    說明:at可以讓使用者指定在TIME這個特定時刻執行某個程序或指令,TIME的格式是HH:MM其中HH為小時,MM為分鐘。如果想要指定超過一年內的時間,則可以使用MMDDYY或者MM/DD/YY的格式,其中MM是分鐘,DD是第幾天,YY是指年份。另外,也可以使用想now+時間間隔來指定時間,其中的時間間隔可以為minutes ,hours ,days ,weeks.例如now+3days;也可以指定todaytomorrow來表示今天或明天。當指定了時間并按下enter之后,at會進入交互模式并要求輸入指令或程序,當輸入完成后按ctrl+D即可完成。執行結果會通過郵件發送給執行程序的賬戶。

  2. 參數說明

    -V :出版編號

    -q:使用指定queue來存儲,at的資料存放在所謂的queue中,使用者可以同時使用多個queue,queue的編號為a,b,c…..z以及A,B,C……Z52個;

    -m:不管程序指令執行完后有沒有輸出結果,都發郵件給使用者

    -f file:讀入預先寫好的命令文檔。可以將所有的命令先寫入文檔在一次讀入;

    -l:列出所有at任務;或者atq;

    -d:刪除at任務,或者使用atrm;  

    -v:列出所有已經完成但尚未刪除的指定;

3、實例:指定今天下午5:30執行某個命令,今天是2015517日中午12點其格式如下:

       at 5:30pm

       at 17:30

       at  17:30 today

       at now + 5 hours

       at now + 300 minutes

       at 17:30 17.5.15

       at 17:30 5/17/2015

       at 17:30 May 17

      實例2at指定一個任務,在當前時間一分鐘后執行,顯示/etc/issue中的內容;1.png

實例3:先創建一個文檔work,放入預先執行的命令,然后用at –f work TIME去執行;2.png

  1. at的執行權限:

    在任何情況下,root用戶都有執行權限;

    對其他用戶來說,是否能夠使用取決于兩個文檔/etc/at.allow/etc/at.deny

    如果/etc/at.allow文檔存在的話,那么只有在其中列出的用戶在能夠使用at

    如果該文檔不存在,那么將檢查/etc/at.deny文檔是否存在,在這個文檔中列出的用戶均不能使用該命令;

    假如兩個文檔都不存在,那么只有中級用戶能夠使用該命令;

    空的/etc/at.deny文檔意味著所有的用戶都能夠使用該命令,這是系統默認狀態.

  2. batch命令同at命令,但無須為其指定時間,其會選擇系統資源空閑時執行指定的作業。

  3. mail命令(linux收發郵件使用方法)

    在終端中輸入命令mail,回車,如果有郵件會顯示出來有幾封,如果沒有會提示no mail for user;輸入mail后進入&模式,此時可以輸入想要查看的郵件編號數字來查看內容,如果想要刪除某個郵件可以使用d #命令,按q保存退出,按x不保存退出;

    兩種發郵件的方法:

           mail –s “subject” username </etc/fstab

           echo “subject”  | mail –s “content”  username

    默認系統會安裝并啟動郵件服務;25號端口,可以使用netstat –tnl /tan   查看25號端口smtp協議是否運行 ;有的系統可能默認沒有安裝郵件系統,此時需要安裝sendmial包即可;

二、周期性執行任務命令crontab(重點)

相比用于安排一次性任務的at命令,crontab命令主要是用于安排一些周期性的任務,比如 定期備份數據、定時殺毒、定期清理垃圾文件等。 Linux中的cron進程是一個主要的系統調度進程,可以在后臺自動完成用戶指定的任務 計劃。它每分鐘檢查一遍各個用戶的“”任務計劃書“”--也就是crontab文件,如果計劃書中所指定的運行條件滿足,就立即為用戶執行計劃書中的任務。centos5以前的版本叫做vixie-cron,centos6以后的版本叫作cronie,在運行前使用rpm –qa | grep “cron” 來查看系統是否已經安裝;可以通過service crond status查看狀態,service crond start ,chkconfig crond on 啟動服務,設置開機自動啟動;

Cron任務分兩類:一類是系統cron:定義在/etc/crontab中,一類是用戶cron:定義在/var/spool/cron中,目錄中每個用戶都有一個與用戶名相同的文件,其功能類似于/etc/crontab;每行定義一個獨立的任務;

  1. crontab命令使用方法

    crontab [-e [username] | -l [username] | -r [username] | -v [username] | File ]

    說明:crontab是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說就是類似使用者的時程表。

    -u username 是指定username的時程表,這個前提是你必須要有其權限,比如root才能夠指定他人的時程表,如果不使用-u user的話,就是表示設定自己的時程表。

    Crontab –l:列出某個用戶cron服務的詳細內容

    Crontab –e:編輯某個用戶的cron服務;

  2. crontab的格式

    # 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

    # |  |  |  |  |

    # *  *  *  *  *  command to be executed

    說明:當使用crontab -e編輯當前用戶的cron表后,會出現一個vi文件,cron的格式是這樣的。分成兩列,左邊是時間,右邊是運行的命令。時間是由5個部分組成。如果執行的命令太多,可以把這些命令寫到一個腳本里面,然后再直接調用這個腳本,調用的時候寫出命令的完整路徑。

    時間的設定有一定的要求,前面5*代表5個數字,數字的取值范圍和含義如下:

    分鐘(0-59)小時(0-23)日期(1-31)月份(1-12)星期(0-607都表示星期天

    除了數字還有幾個特殊的符號就是“*”“/”“”“,,*代表所有的取值范圍內的數字,/代表每的意思,*/5代表每5個單位,代表從某個數字到某個數字,“,”分開幾個離散的數字。

    例子1:   0 8 5 6 *  command  表示每65日的8點整執行命令;

    例子2: 10,30,50 * * * * date  表示每小時的10分,30分,50分顯示時間

    例子3: 0 6 * * * * echo “good morning” >>/tmp/test.xt 每天早上6點執行,注意單純的echo從屏幕上看不到任何輸出,因為cron把任何輸出都會通過mail發送給用戶;

    例子4: 0 */2 * * * echo “hi” 每兩個小時執行一次;

    例子5: 0 11 4 * 1-3 command 表示每個月的4號和每個禮拜的13的早上11點執行

3通常,系統并不允許用戶直接編輯計劃書,/var/spool/cron/crontabs目錄也只有root用戶才可讀寫。為了方便計劃書的管理,系統提供了crontab命令:crontab -u username –e

補充說明:

3.1. 環境變量,cron進程執行任務時,并不加載計劃書所屬用戶的環境變量,只加載幾個最基本的環境變量,比如執行任務的sh,$HOME,$MAILTO等。這幾個環境變量的定義是在 /etc/crontab文件中。其中$MAILTO是指定計劃執行過程中發生錯誤或者有數據輸出時發 送郵件到哪個用戶。通常會在腳本中加入. /etc/profile 或者. ~/.bash_profile即可。

3.2. 不能運行crontab命令或者計劃沒有被執行,crontab的權限設置是由兩個文件來決定的 /etc/cron.allow, /etc/cron.deny。如果存在/etc/cron.allow,則把要執行計劃的 用戶名稱添加到其中;若/etc/cron.deny存在,則確保要執行計劃的用戶名稱不在 /etc/cron.deny中;如果兩個文件都存在,/etc/cron.allow優先。

3.3. 計劃書的輸出和日志,如果用戶的計劃書在運行時有輸出,用戶是無法直接從終端上看 到的。cron進程會將執行計劃時產生的所有輸出數據和錯誤信息發送到指定用戶的郵箱 ,用戶可到郵箱中去查看,所以建議在計劃中把有用的輸出數據重定向到文件中。要想 查看各個計劃的執行情況,可以查看cron進程的日志文件:/var/log/cron。

3.4. 更簡單的任務計劃, 如果覺得這樣麻煩,還有一種簡單的方法。/etc下面有4個目錄: cron.hourly,cron.dailycron.weekly,cron.weekly,這4個目錄下腳本的執行周期 分別是每小時,每天,每周,每月。根據自己的需要,將要運行的腳本直接放置到對應 的目錄下即可,系統會自動為你完成任務。

3.5.使用注意事項:每月幾號和周幾一般不同時使用,如 1 9 * * 3 :表示每周三執行一次;

Crontab –e 打開編輯界面定義任務時先啟用臨時文件,如果剛到此時間點執行而沒有編輯會怎么樣?

4、anacron: crontab的補充機制,檢查有沒有過去的一個有效周期未曾執行的任務,如果有,在開機后的指定時間點執行一次;這個是系統設置好了,清理系統垃圾或者是自動執行某些腳本的系統任務,一般我們做了解就行了,不要更改。配置文件是/etc/anaconrtab。

以上是自己總結的一些心得體會,任務計劃是實現自動化運維的重要命令,希望大家重視,如有問題請多指點。

原創文章,作者:wxdz_2004(古雨秋),如若轉載,請注明出處:http://www.www58058.com/4539

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-05-18
下一篇 2015-05-18

相關推薦

  • 在 Linux 下你所不知道的 df 命令的那些功能

    原文出處: xmodulo   譯文出處:linux.cn – mtunique   歡迎分享原創到運籌維幄 問題: 我知道在Linux上我可以用df命令來查看磁盤使用空間。你能告訴我df命令的實際例子使我可以最大限度得利用它嗎?   對于磁盤存儲方面,有很多命令行或…

    Linux干貨 2015-03-02
  • 馬哥教育網絡班21期-第一次課程作業

    計算機組成部分及其作用 1.總線 電子管道,攜帶信息字節并在各個部件間傳輸。分為地址總線,數據總線,控制總線。 CPU最大可尋址范圍:2^N*M,  N為地址總線數量,M為數據總線數量。 2.I/O設備 I/O設備及輸入輸出設備,最常見的輸入設備就是我們非常熟悉的鍵盤,鼠標,我們通過我們通過這些設備向計算機傳達指令,讓計算機完成我們想要它完成的工作…

    Linux干貨 2016-06-29
  • AIDE入侵檢測

    AIDE

    當一個入侵者進入了你的系統并且種植了木馬,通常會想 辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外, 他會盡量給你檢查系統的過程設置障礙),通常入侵者會 修改一些文件,比如管理員通常用ps -aux來查看系統進 程,那么入侵者很可能用自己經過修改的ps程序來替換掉 你系統上的ps程序,以使用ps命令查不到正在運行的木馬 程序。如果入侵者發現管理員正在運行crontab作業,也 有可能替換掉crontab程序等等。所以由此可以看出對于 系統文件或是關鍵文件的檢查是很必要的。目前就系統完 整性檢查的工具用的比較多的有兩款:Tripwire和AIDE ,前者是一款商業軟件,后者是一款免費的但功能也很強 大的工具

    2018-01-08
  • 系統啟動及恢復

    一、知識整理 1、modinfo命令:顯示模塊的詳細描述信息: -n 只顯示模塊文件路徑 -p 顯示模塊參數 -a auther -d description -l license協議 modprobe命令:裝載或卸載內核 -r卸載內核,同rmmod 配置文件:/etc/modprobe.d/*.conf depmod命令:內核模塊依賴關系文件及系統信息映射…

    Linux干貨 2016-09-22
  • grep與正則表達式

    文本處理中比較強悍的三個工具是:grep、sed、awk。 其中grep主要作用是對于用戶給出“模式”對文本逐行進行匹配檢查,然后進行打印。   模式:由正則表達式字符及文本字符編寫的過濾條件 格式:grep [選項] [正則表達式字符]  文件  常用的選項:     -v:反向查找,顯示沒有被匹配的的行 …

    Linux干貨 2016-08-08
  • 第五周 N21 總有刁民想害朕

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; egrep "^[[:space:]]+" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; egrep "^#[[:space:]]+…

    Linux干貨 2016-07-16
欧美性久久久久