1. 程式人生 > >創建周期性計劃任務cron

創建周期性計劃任務cron

linux

創建周期性計劃任務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

技術分享

(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-70和都表示星期日)

6 root 表示執行人是root

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

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

3、分析:在工作日時間,即周一到周五,可以在第五位寫1-51,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