天天看點

Linux例行性工作at,cron,程序管理

  Linux工作排程的種類:at,cron

兩種工作排程的方式:

     一種是例行性的,就是每隔一定的周期要來辦的事項(通過at實作);

一種是突發性的,就是這次做完以後就沒有的那一種(通過cron實作)。

一、突發性的工作排程(at)

要使用單一工作排程,我們的Linux系統上面由atd來負責這個排程的服務,首先啟動/etc/init.d/atd restart   

 可以設定一下開機時就啟動這個服務,免得每次重新啟動都得再來一次。 chkconfig atd on 

 at安全管理

    /etc/at.deny

    将不可以使用at的帳号寫入其中,若未記錄到這個檔案當中的使用者,就可以使用at

 at的參數使用

   at [-m -v -c -l -d]  TIME

  -m 當at的工作完成後,即使沒有輸出資訊,以      email通知使用者該工作已完成

   -l 相當于atq,列出所有使用者的at任務

   -d 相當于atrm,去掉at的任務

   -v 可以用較明顯的時間格式列出at排程中的工作

   -c 列出後面接的該項工作的實際指令内容

TIME:時間格式,這裡可以定義什麼時候要進行at這項工作時間,格式有:

    HH:MM     ex>04:00

    HH:MM YYYY-MM-DD  ex>04:00 2012-04-01

    HH:MM[am|pm]  [Month]  [Date]   ex>04:00 March 17

    HH:MM[am|pm]  +number [minutes|hours|days|weeks]

    ex>now +5 minutes  就是說,在現在在加5minutes後進行該工作排程。

    編寫例行性工作時應注意:

    使用指令時盡量用絕對路徑,

    用Ctrl+d 結束編寫。

at工作的管理

 at并不像cron那樣,可以用crontab -e來編輯自己的工作排程,

當我們發現指令輸入錯誤,就目前來講,隻能删除它。

(因為at的存放檔案并不像crontab,at指令的存放檔案為二進制檔案[/var/spool/at/,對應的工作排程執行過後,則其二進制檔案也就消失了],可用od檢視,從簡單使用的角度來講,若指令錯了,直接删除(atrm)重建)

  atq 查詢目前主機上面有多少的at工作排程;

  atrm 後加工作序列号,删除該工作任務。

二、例行性的工作排程(cron)

   cron安全管理

   /etc/cron.deny

   将不可以使用crontab的帳号寫入其中,若未記錄到這個檔案當中的使用者,就可以使用crontab.

  crontab的參數使用

  -u -e -l -r

  -u 隻有root才能進行這個任務,也即幫其他使用者建立  、删除crontab工作高度;

  -e 編輯crontab的工作内容;

  -l 查閱crontab的工作内容;

  -r 删除所有的crontab的工作内容,若僅要删除一項  ,請用-e去編輯。

範例:用root的身份在每天的12:00發信給自己

crontab -e

#此時進入vi的編輯器界面。

 0  12  *  *  *  mail root -s "at 12:00" </root/.bashrc

#分 時  日 月 周 |<-------------指令串------------------>|

預設情況下,任何使用者隻要不被列入/etc/cron.deny當中,那麼他就可以直接執行“crontab -e”去編輯自己的例行性指令了。當使用者使用crontab這個指令來建立工作排程之後,該項工作就會被記錄到/vart/spool/cron裡面去了,而且是以帳号來作為判别的。

crontab指令的特殊字元:

  *   代表任何時刻都接受的意思

  ,    代表分隔時段的意思,舉例:要執行工作3:00和6:00時,就是 0 3,6  *  *  * cdommand

  -    代表一段時間範圍内,

  /n    即是第隔n機關間隔的意思

舉例:*/5 * * * * command  即是每隔5分鐘執行一次這個指令

 可能有時處于停機狀态時,crontab指令就不能執行,這時就需要anacron來可喚醒停機期間的工作任務

  anacron 以天為機關或者在開機後立刻進行anacron的操作,它會去檢測停機期間應該進行但是并沒有進行的crontab任務,并将該任務執行一遍,然後anacron就會自動停止了。

   由于/etc/cron.daily内的任務比較多,是以我們使用每天進行的任務來解釋一下anacron的運作情況好了。anacron若執行“anacron -scron.daily”時,它會這樣運作的:

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

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

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

    4.若準備進行指令,根據/etc/anacrontab的設定将延遲65分鐘;

    5.延遲時間過後,開始執行後續指令,即“run-parts /etc/cron.daily"這個指令;

    6.執行完畢後,anacron程式結束。

   現在你知道為什麼隔了一陣子才将linux開機時,開機過後約1小時左右系統會有一小時段的忙碌,而且硬碟會跑個不停!那是因為anacron正在執行過去crontab未執行的各項工作排程。

  程序管理:

   jobs  -l

<a href="http://blog.51cto.com/attachment/201211/123112918.png" target="_blank"></a>

注:其實+代表最近被放到背景的工作号碼,-代表最近最後第二個被放置到背景中的工作号碼。而超過最後第三個以後的工作,就不會有+、-符号存在了!

工作狀态是stopped,若工作狀态為done,說明已經結束了,即便是最近沒有+号,當你在執行一次jobs,就已經看不到該工作了。

<a href="http://blog.51cto.com/attachment/201211/123718543.png" target="_blank"></a>

  程序的執行順序  

  priority與nice 

   PRI 值越低代表越優先,這個PRI的值是由核心動态調整的,使用者無法直接調整PRI值,

   可通過Nice值,

   PRI(new)=PRI(old)+nice

  nice值可以調整的範圍為-20—19;(root)

     普通使用者調整的範圍為0—19

  nice 是對即将執行的指令

   #用root給一個nice值為-5,用于執行vi,并檢視該程序!

   [root@www ~]nice -n -5  vi  &amp;

  renice  是對正在執行的執行

   renice [number] PID

   [root@www ~]renice 10  18625

  kill -signal PID

  可以幫我們将這個signal傳送給某個工作(%jobnumber)或者是某個PID(直接輸入數字。要再次強調的是:kill後面直接加數字與加上%jobnumber的情況是不同的!這個很重要。因為工作控制中有1号工作,但是PID1号則是專指“init”這個程序。你怎麼可以将init關閉呢?關閉init,你的系統就死掉了啊!是以記得那個%是專門用在工作控制的。

     舉例:如下圖:用vim在背景運作,用jobs檢視,并想通過kill 1來删除該工作号,發現并不能成功,會彈出說是不允許的操作,因為kill 1并不是殺掉1号工作,而是關閉init,即系統的主程序,當然是不允許的了。

<a href="http://blog.51cto.com/attachment/201210/172828722.png" target="_blank"></a>

應該用kill %1,就能正确關閉1号工作了。

<a href="http://blog.51cto.com/attachment/201210/172842493.png" target="_blank"></a>

 killall -signal   指令名稱

  由于kill後面必須要加上PID(或者是jobnumer),是以,通常kill都會配合ps,pstre等指令,因為我們必須要找到相對應的那個程序的ID。但是,如此一來,很麻煩,可以直接用killall 其後直接跟指令名稱,

    killall -1 httpd  可以讓PID重新讀取自己的配置檔案,類似重新啟動httpd服務

    也可以用 pkill  -1  httpd

  killall -9 httpd  強制終止所有以httpd啟動的程序;

  killall -i  bash  依次詢問每一個bash程序是否需要被終止進行。

 總之,要删除某個程序,我們可以使用PID或者啟動該程序的指令名稱,而如果要删除某個服務呢,最簡單的方法就是利用killall,因為它可以将系統當中所有以某個指令名稱啟動的程序全部删除。

本文轉自 劉園  51CTO部落格,原文連結:http://blog.51cto.com/colynn/1011482

上一篇: ssh_config詳解
下一篇: ssh 更新

繼續閱讀