目 錄
一、周期性任務計劃: 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 &> /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