創建周期性計劃任務cron
創建周期性計劃任務cron
目 錄
一、周期性任務計劃: cron
二、系統計劃任務
三、用戶創建計劃任務
四、控制用戶執行計劃任務
本篇中主要從具體的實例中說明怎樣創建計劃任務
一、周期性任務計劃: cron
(1)計劃周期性執行的任務提交給crond,到指定時間會自動運行
系統cron任務:系統維護作業
(2)相關的程序包:默認已安裝
使用 rpm –qi cronie 查看相關包具體信息
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron: cronie的補充程序,用於監控cronie任務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則
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命令 使用
(5)日誌監控計劃任務: /var/log/cron 監控計劃任務
二、系統計劃任務
(1)查看任務 vim /etc/crontab
(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、代碼:
#!/bin/bash # ------------------------------------------ # Filename:checkdisk.sh # Revision: 1.0 # Date: 2017-9-9 # Description: check cipan 80% # ------------------------------------------ # 定義變量以數字方式顯示出星期幾 week=`date +%w` # 找出磁盤利用率最大的值 max=`df|egrep "^/dev/sd.*" |egrep -o"[0-9]+%"|cut -d% -f1|sort -nr|head -n1` #判斷星期幾的數是否小於6,即周一到周五,如果不是,退出不執行。如果是,則判斷磁盤利用率最大的值是否大於80,如果大於,則廣播,如果小於則退出 if [ $week-lt 6 ] ;then if [$max -gt 80 ];then wall "the diskspace willfull" else exit fi else exit fi #釋放變量,是個好習慣。 unset week max
註意:(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
切換到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任務。
創建周期性計劃任務cron