天天看點

建立周期性計劃任務cron 建立周期性計劃任務cron一、周期性任務計劃: cron二、系統計劃任務三、使用者建立計劃任務四、控制使用者執行計劃任務

目 錄

一、周期性任務計劃: cron

二、系統計劃任務

三、使用者建立計劃任務

四、控制使用者執行計劃任務

本篇中主要從具體的執行個體中說明怎樣建立計劃任務

    (1)計劃周期性執行的任務送出給crond,到指定時間會自動運作

系統cron任務:系統維護作業

    (2)相關的程式包:預設已安裝

         使用 rpm –qi cronie  檢視相關包具體資訊

    cronie: 主程式包,提供crond守護程序及相關輔助工具

    cronie-anacron: cronie的補充程式,用于監控cronie任務執行狀況,如cronie中的任務在過去該運作的時間點未能正常運作,則anacron會随後啟動一次此任務

    crontabs:包含CentOS提供系統維護任務

    (3)要確定crond守護處于運作狀态:檢視crond服務是否啟動

    CentOS 7:

    systemctl status crond   檢視是否啟動

    systemctl start  crond   啟動方法

    CentOS 6:

    service crond status檢視是否啟動

    service crond start  啟動方法

(4)系統cron任務:系統維護作業

/etc/crontab    将計劃任務寫入該檔案

使用者cron任務:

crontab指令     使用crontab指令建立

(5)日志監控計劃任務: /var/log/cron    監控計劃任務

     (1)檢視任務  vim  /etc/crontab

<a href="https://s5.51cto.com/wyfs02/M01/A4/EF/wKioL1m03fWQNUwfAABWd-hqNAA406.png" target="_blank"></a>

    (2)例子1:工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區使用率高于80%,就執行wall警報

          vim  /etc/crontab

        1、解釋:第1位 */10 表示每10分鐘執行一次(注意,*/#這裡#僅限能被60 整除的數,如 */12 表示每12分執行一次)

                   第2位  * 小時,*代表每個小時都要執行,2代表淩晨兩點執行,20代表晚上8點執行(24小時制) 

        第3位  *日,*代表每天執行,4 表示每月4号執行。20代表每月20号執行(1-31天)

        第4位  *月,*代表每月都執行,1代表一月,2代表2月 (1-12月)

        第5位  *星期幾,*代表任意一天,1表示星期一,(0-7,0和都表示星期日)

        第6位   root  表示執行人是root 

        第7位   /bin/root/checkdisk.sh   執行的操作,可以是一條指令,也可以是腳本名稱,注意這裡寫上完整的路徑。

     2、注意:這裡的第3位:天與第5位:星期幾會産生沖突,如第3位寫的20 ,第5位寫的3 ,而20号這天不是星期三,那麼怎樣執行呢。這裡采取或關系,即20号這天執行,星期三也執行,其他各個位上的關系是與關系。

    3、分析:在工作日時間,即周一到周五,可以在第五位寫1-5(1,2,3,4,5可以 ;1-3,4,5也可以),但是第3位天上該怎樣寫呢,兩者是或關系,如果第三位寫上*代表每一天都執行,包括周六,周日。那總不可能看看月曆算一算吧,畢竟每個月都不一樣。是以我把每個位上都寫了*,那麼上面就表示,每天每10分鐘root執行一次/bin/root/neicun.sh這個腳本,那麼判斷星期幾可以在腳本中判斷,如果是周一到周五,執行任務,如果周六周日,什麼也不做,不就滿足要求了。

    4、代碼:

<code>#!/bin/bash</code>

<code># ------------------------------------------</code>

<code># Filename:checkdisk.sh</code>

<code># Revision: 1.0</code>

<code># Date: 2017-9-9</code>

<code># Description: check cipan 80%</code>

<code># 定義變量以數字方式顯示出星期幾</code>

<code>week=`</code><code>date</code> <code>+%w`</code>

<code># 找出磁盤使用率最大的值</code>

<code>max=`</code><code>df</code><code>|</code><code>egrep</code> <code>"^/dev/sd.*"</code> <code>|</code><code>egrep</code> <code>-o</code><code>"[0-9]+%"</code><code>|</code><code>cut</code> <code>-d% -f1|</code><code>sort</code> <code>-nr|</code><code>head</code> <code>-n1`</code>

<code>#判斷星期幾的數是否小于6,即周一到周五,如果不是,退出不執行。如果是,則判斷磁盤使用率最大的值是否大于80,如果大于,則廣播,如果小于則退出</code>

<code>if</code>  <code>[ $week-lt 6 ] ;</code><code>then</code>

<code>     </code><code>if</code> <code>[$max -gt 80 ];</code><code>then</code>

<code>      </code><code>wall </code><code>"the diskspace willfull"</code>

<code>     </code><code>else</code>

<code>         </code><code>exit</code>

<code>     </code><code>fi</code>

<code>else</code>

<code>      </code><code>exit</code>

<code>fi</code>

<code>#釋放變量,是個好習慣。</code>

<code>unset</code> <code>week max</code>

注意:(1)沒有被重定向的輸出會被郵寄給使用者

(2)根使用者root能夠修改其它使用者的作業

(3)運作結果的标準輸出和錯誤以郵件通知給相關使用者

   執行的指令結果最好導入垃圾桶中

COMMAND &amp;&gt; /dev/null

(4)對于cron任務來講, %有特殊用途;如果在指令中要使用%,則需要轉義,将%放置于單引号中,則可不用轉義

  建議将執行的操作寫入腳本中,不要直接寫在/etc/crontab中

(5)指令在寫入腳本或者/etc/crontab之前,建議先做測試

(6)這裡寫完腳本後要把腳本加上執行權限,chmod +x checkdisk.sh(腳本名)

(1)使用者cron:

crontab指令定義,每個使用者都有專用的cron任務檔案:  /var/spool/cron/USERNAME 

crontab指令:本身有suid   權限

crontab [-u user] [-l | -r | -e] [-i]

-l: 列出所有任務;

-e: 編輯任務;                               

 * * * * * wall I am 

-r: 移除所有任務;

-i:同-r一同使用,以互動式模式移除指定任務

-u user: 僅root可運作,指定使用者管理cron任務 

                               crontab –e –u wang

(2)例子1:普通使用者guan 每分鐘廣播一次I am guan

         切換到guan 使用者下 su – guan

<a href="https://s2.51cto.com/wyfs02/M01/06/3F/wKiom1m05VrRXa39AAAKWcahJSQ456.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/A4/F0/wKioL1m05UHxz9a8AAAKkAlmbHA529.png" target="_blank"></a>

  切換到root使用者下,su – root ,進入/var/spool/cron/ ,可以看到guan使用者建立的任務,當然root使用者可以修改和删除普通使用者的計劃任務。

    控制使用者執行計劃任務:   /etc/cron.{allow,deny}

       白名單: /etc/cron.allow 預設不存在,隻有該檔案中的使用者才能執行crontab指令

       黑名單:/etc/cron.deny 預設存在,拒絕該檔案中使用者執行crontab指令, 而沒有在cron.deny 檔案中的使用者則可執行

     如果兩個檔案都不存在,隻有root 可以執行 crontab 指令

           解釋:先看/etc/cron.allow檔案,如果有,則隻看/etc/cron.allow檔案,隻有/etc/cron.allow中的使用者才能執行,如果沒有該檔案,則檢視/etc/cron.deny檔案。除/etc/cron.deny中的使用者之外的使用者都可以建立cron任務,如果兩個檔案都不存在,則僅root可以建立cron任務。

 本文轉自 hawapple 51CTO部落格,原文連結:http://blog.51cto.com/guanm/1964107

繼續閱讀