天天看點

Linux任務作業(單次作業和周期性作業)

1.Linux任務計劃分為兩種:   一是一次性任務執行(at,batch),就是在未來的某個時間段執行一次,比如:定時關機.二是周期性任務(crontab,anacron),在未來指定的時間點循環或每隔多長時間執行一次任務,比如:每天淩晨4點備份資料庫或者每隔兩天更新一次病毒庫等. 首先介紹一次性任務作業:at at指令是一種互動式指令,它有兩種執行模式,一種是互動式,它可以讓使用者在at>提示符下輸入一個或多個指令.一種是批處理式,它将任務的指令寫入檔案中,由at調用. 我們來看看互動式at,其實很簡單,隻要鍵入指令 at TIME,例如:at 20:00,表示在離現在最近的20點執一次行任務,當然,不能是目前以前的時間,隻能是目前往後的時間,看示例: 首先是互動式指令 1.指令at TIME
Linux任務作業(單次作業和周期性作業)
2.我們指定了作業,那如何檢視作業呢? 使用指令at –l,也可以使用atq,atq指令與at -l是一樣的
Linux任務作業(單次作業和周期性作業)
3.咦上面的作業隊列是什麼啊?作業有隊列的概念,預設情況下,所有人的作業都在一隊下,這樣管理起來就不友善,是以我們就可以給不同的使用者或者其他什麼的分隊列,作業清單是[a-z],請看下圖: 使用指令 at –q [a-z]
Linux任務作業(單次作業和周期性作業)
4.如果我們突然又不想執行某個作業了呢?很簡單,隻要作業的時間沒有到,我們都可以使用at –d [作業編号] 都可以删除,我們來看看 使用指令 at –d [作業編号] 也可以使用atrm [作業編号]
Linux任務作業(單次作業和周期性作業)
5.我們再來看看批處理模式,如何實作呢,我們隻需事先寫好一個腳本,然後使用at –f 去讀取腳本既可以 使用指令 at –f [腳本名] [TIME] 先寫一個腳本
Linux任務作業(單次作業和周期性作業)
6.然後使用at -f去讀取它
Linux任務作業(單次作業和周期性作業)
忘了說了,任務執行的結果預設會以郵件的方式發送給送出者,隻要查收你的郵件就行了. 還有,預設情況下at是誰都可以執行的,但是如果在系統最忙的時候,一個普通使用者去執行了at複制大量檔案,那就會很占系統資源,是以在/etc/at.deny檔案中,可以寫入你不想讓他執行at的使用者的使用者名,這樣他就不能執行at指令了
Linux任務作業(單次作業和周期性作業)
                          r
提示:batch的指令使用與at的差別是,batch不能設定執行的時間,隻能由系統自動選擇空閑的時間執行 2.周期行任務計劃:cron      crond是守護程序,什麼是守護程序呢,就是運作在背景随時監聽使用者的請求随時響應的程序,在windows上叫做服務程序.那監聽是如何實作的呢?它可以使用阻塞和輪循的方式來實作,那我們來說說阻塞和輪循吧.阻塞是什麼呢,阻塞就是長期占用一個程序專門負責監聽,就好像專門有一個人在門後等人敲門然後開門.那輪循呢,輪循就是有一個程序又負責其他的事情但是過一段時間就會來看看有沒有請求需要響應,就想那個人一會去二樓忙事情,一會來看看有沒人敲門.
cron又分系統級别和使用者級别,那什麼是系統級别呢,不知道大家還記得whatis指令嗎,在系統運作初期,whatis是查詢不到東西的,要通過系統自動建立(當熱你也可以手動建立)資料庫,然後才會有查詢結果,這就是系統cron,也就是由系統自動執行的.但是大家知道,我們的伺服器經常是在沒有使用者登入的情況下也會自動運作他的周期任務,那系統以誰的身份(誰的環境變量)去執行該要運作的程序呢?是否沒有一個使用者登入他就不能運作到期執行的任務了呢?不是的,系統會以系統的環境變量去運作該些程序,也就是所謂的非登陸時shell,是以大家千萬要注意,在編寫腳本的時候被調用的指令要寫全路徑,不然你會出現自己執行指令的時候沒問題,但是執行腳本的時候找不到路徑的情況,千萬要注意!!!那麼任務執行的結果我們怎麼知道呢?預設會以郵件發方式發送給root使用者. 系統cron的檔案在,/etc/crontab中,如果想啟用系統級别的cron就把指令寫進去就行了,要想運作使用者級别的cron就直接使用crontab指令就行了,使用者crontab在/var/spool/cron/UserName中,來看看下圖:
Linux任務作業(單次作業和周期性作業)
我們在來看看它的時間設定,如下圖:
Linux任務作業(單次作業和周期性作業)
我們來說說,他有5個"*"号,如果是 8 8 * * *,就表示8點8分,也就是每天的8點8分;8 8 8 * *,表示每個月的8号8點8分;* 8 8 * *表示每個月的8号8點的每一分鐘.是以大家要注意了,設定時間的時候,最小的機關都不能為"*",除非你有特殊需求 時間表示法: 1.每個時間都應該使用其可用的有效取值範圍内的值;         7 8 9 * *:表示9号8點7分 2.某時間位上的*表示對應位的多有有效取值        * 8 9 * *:表示9号8點每一分鐘都執行 3.-:連續的時間相鄰取值        10-15 8 9 * *:表示9号8點的10分到15分每分執行一次 4.,:離散的時間取值         10,15,20 8 9 * *:表示9号8點的10分,15分,20分各執行一次 5./#,表示在指定時間範圍内每隔#一次         */20 8 9 * *:表示9号8點每20分鐘執行一次
如果我們不想檢視執行的結果呢,可以把輸出重定向,如: 0 */2 * * *   /bin/echo “hello” &> /dev/null 或者MAILTO=””,不過不建議這種做法,還是上面一種好點 下面來說說crontab指令:     -l:檢視自己的cron任務清單     -e:打開自己的crontab清單     不帶參數,就執行類似at的互動式指令     -r:删除任務 如果是管理者加上-u 可以為普通使用者指定任務:如   crontab –l –u [普通使用者] 看執行個體:
Linux任務作業(單次作業和周期性作業)
Linux任務作業(單次作業和周期性作業)
注意:如果語句裡面有"%",需要加上單引号或者轉義,如: 5 3 * * * /bin/touch /tmp/test`date+ \%Y-\%m-\%d`.txt 5 3 * * * /bin/touch /tmp/test`date+‘%Y-%m-%d’`.txt
上一篇: Linux作業
下一篇: 作業4