計劃任務和周期性任務

linux計劃任務

    功能:指定未來的某以特定的時間點執行一次任務

    命令:at、bathc

    at命令:

        選項:

            -V:顯示版本信息

            -l:列出指定隊列中等待運行的作業;相當于atq

            -d +作業編號:刪除指定的作業;相當于atrm

            -c:+作業編號:查看指定的作業任務

            -f:/path/from/somefile:從指定的文件中讀取任務

                  at now + 3 minutes -f /testdir/qipan.sh 

            -m:當任務完成后,給用戶發送郵件,即使沒有標準輸出

        注意:作業執行的結果中的標準輸出和錯誤以郵件通知給相關用戶,例如echo命令執行結果不會再屏幕顯示

        Time:定義出什么時候進行at這項任務的時間

            HH:MM [yyyy-mm-dd]

            noon(12),midnight(0),teatime(16),tomorrow,now+#{minutes,hours,days,OR weeks}

          例如: 04pm March 17

            04:00 2016-09-20

                17:20 tomorrow

                now + 5 minutes

                04pm + 3 days

        root@cenots6.8  ~ # at 9:00 2016-10-10        
        at> wall Are you OK?
        at> <EOT>          ##########ctrl + d 退出
        job 6 at 2016-10-10 09:00
        root@cenots6.8  ~ # at 11:00 <<EOF    
        > what?
        > where?
        > EOF              #####此處輸入結束符EOF即可
        job 10 at 2016-09-10 11:00

        權限:普通用戶也可以執行at計劃任務權限,也可以把用戶放到/etc/at.deny這個黑名單中,直接在名單中寫用戶名即可,在該名單的用戶則在at計劃任務時,提示沒有權限,當然也有白名單/etc/at.allow(默認不存在,需要手動創建),當白名單存在時,則白名單的優先級高于黑名單,且只有添加到白名單的用戶才具有at命令,即使你不在黑名單里,如果兩個文件都不存在則只有root有at權限。

        注意:在使用該命令之前要確定atd服務是否啟動,service atd status,也可通過chkconfig –list atq 查看特定運行級別下是否開機啟動。

linux周期性任務

    周期性計劃任務:cron

        相關的程序包:

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

        cronie-anacron:cronie的補充程序,用戶監控cronie任務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務。

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

    確保crond守護處于運行狀態:

        centos 7 systemctl status crond

        centos 6 service crond status

    計劃周期性執行的任務提交給crond,到指定的時間會自動運行

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

            /etc/crontab

    系統cron任務:/etc/crontab    
    注釋行以 # 開頭
    詳情參見 man 5 crontab
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR
    sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    10 21 * * * centos /bin/echo "Howdy!"  晚上9點10分運行echo命令;
    
    應用舉例:
            3 * * * *:每小時的第三分鐘
            3 4 * * 5:每周五的4點三分
            5 6 7 * *:每月的7號6點5分
            7 8 9 10 *:每年的10月9號8點7分
            9 8 * * 3,7:每周三和周日
            * 8,20 * * 3,7 每周三周日的早八點晚八點的每分鐘執行一次任務
            08,20 * * 3,7 每周三周日的早八點晚八點的每分鐘執行一次任務
            09-18 * * 1-8 工作時間內的每小時
            */5 * * * * 每5分鐘執行一次

        時間表示法:

            (1) 特定值;

                給定時間點有效取值范圍內的值

            (2) *

                給定時間點上有效取值范圍內的所有值表示“每…”

            (3) 離散取值:

                #,#,#

            (4) 連續取值: –

                #-#

            (5) 在指定時間范圍上,定義步長:

                /#: #即為步長   每。。。

                    0 */3 * * * centos /bin/echo "howdy!"  每3小時echo命令;

        時間格式:

             @reboot Run once after reboot.

             @yearly 0 0 1 1 *

             @annually 0 0 1 1 *

             @monthly 0 0 1 * *

             @weekly 0 0 * * 0

             @daily 0 0 * * *

             @hourly 0 * * * *

        計任務:

            通過run-parts命令每隔固定的時間執行目錄中的腳本,因此如果我們有哪些腳本需要周期性執行的可放到指定的目錄

            /etc/crontab

            /etc/cron.d/ 配置文件   

            /etc/cron.hourly/ 腳本    每隔一小時執行目錄中的腳本

            /etc/cron.daily/ 腳本

            /etc/cron.weekly/ 腳本

            /etc/cron.monthly/腳本

        anacron系統:

            功能:當我們計劃執行某一任務時,如果系統關機會導致計劃任務不能執行,因此,可以通過配置/etc/anacrontab來進行開機后多長時間之內,執行計劃任務。

            配置文件: /etc/anacrontab,負責執行/etc/cron.daily /etc/cron.weekly /etc/cron.monthly中系統任務。                  /etc/cron.hourly/由/cron.d/0hourly執行

                    ? 字段1:如果在這些日子里沒有運行這些任務……

                    ? 字段2:在重新引導后等待這么多分鐘后運行它

                    ? 字段3:任務識別器,在日志文件中標識

                    ? 字段4:要執行的任務

        root@centos7.2  /etc/cron.daily # cat /etc/anacrontab         
        # /etc/anacrontab: configuration file for anacron  
        SHELL=/bin/sh
        PATH=/sbin:/bin:/usr/sbin:/usr/bin
        MAILTO=root
        # the maximal random delay added to the base delay of the jobs
        RANDOM_DELAY=45 ###最大延遲時間45min
        # the jobs will be started during the following hours only
        START_HOURS_RANGE=3-22
        
        #period in days   delay in minutes   job-identifier   command
        1	5	cron.daily		nice run-parts /etc/cron.daily
        7	25	cron.weekly		nice run-parts /etc/cron.weekly
        @monthly 45	cron.monthly		nice run-parts /etc/cron.monthly

    

    用戶cron任務:

        crontab命令定義:每個用戶都有專業的cron任務文件;/var/spool/cron/USERNAME(crontab -e 后自動生成,里面存儲計劃任務的內容,且與系統計劃任務的區別是不用寫用戶名)

        crontab命令:

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

                -l:列出所有任務

                -e:編輯任務

                -r:移除任務

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

                -u user:僅root可運行,指定用戶

        控制用戶執行計劃任務:/etc/cron.{allow,deny}等同于前面提到at權限問題。

        日志:/var/log/cron

    注意:運行結果的標準輸出和錯誤輸出會以郵件通知給相關用戶相關用戶,導致大量垃圾郵件占用磁盤空間,所以可采取如下措施:

            1、command > /dev/null

            2、command &> /dev/null

        對于cron任務來講,%有特殊用戶,如果命令中要使用%,則需要轉義,不過,如果把%放置于單引號中,也可以不用轉義

        例如:如何實現秒級別運行任務?

            * * * * * for min in 0 1 2;do echo "hi";sleep 20;done 每隔20秒執行一次echo hi

            如何實現每7分鐘運行一次任務?

            sleep命令:

                sleep #[suffix]

                    suffix:s,秒,默認

                        m,分,

                        h,小時

                        d,天   

                usleep:微妙   usleep 1000000:1s

             

         練習:

            1、每4小時備份一次/etc目錄至/backup目錄中,保存的文件名稱格式為“ etc-yyyy-mm-dd-HH.tar.xz”

0 4 * * * tar Jcf /backup/etc-`date +\%F-\%H`.tar.xz /etc/ &> /dev/null

            2、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“ messages-yyyymmdd”

* * * * 2,4,7 cp -a /var/log/messages /logs/messages-`date  +\%Y\%m\%d`

            3、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中

* */2 * * * grep "^[SM]" /proc/meminfo >> /tmp/meminfo.txt

            4、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高于80%,就執行wall警報

*/10 * * * * /root/bin/disk.sh
#!/bin/bash
DISK=`df|grep "^/dev/sd.*" | tr -s " "|cut -d" " -f5 | tr -d %|sort -n|tail -1`
[ $DISK -gt 80 ] && wall "disk will be full"

    

    

原創文章,作者:Naruto,如若轉載,請注明出處:http://www.www58058.com/45082

(0)
NarutoNaruto
上一篇 2016-09-12
下一篇 2016-09-12

相關推薦

  • ?Nginx 代理與緩存

    Nginx 代理與緩存 代理、緩存、集群概述 緩存控制(ngx_http_proxy_module) 配置nginx代理的URI資源類型 增加X-Forwarded-For值 啟用proxy緩存URL資源 封裝首部(ngx_http_headers_module) 響應報文首部添加代理信息 代理調度模塊(ngx_http_upstream_module) R…

    Linux干貨 2016-10-30
  • Linux-文件基本權限及特殊權限詳解

    Linux文件基本權限及特殊權限詳解 背景 Linux文件基本權限和特殊權限對于初學者很少煩惱,各種無法理解,所以在學到這一節時,將自己學到的以及自己的理解寫出來以檢查自己對這個部分的掌握情況。 什么是權限 在Linux里一切皆文件,所謂的權限就是用戶對文件(目錄也是以個文件)的操作范圍,對文件的操作包括讀、寫和執行,用戶對文件有不同的權限就能做相應的操作?!?/p>

    Linux干貨 2017-07-22
  • linux做路由并實現路由轉發

    一、環境介紹 1.linux版本:CentOS6.8,CentOS7.2兩臺主機分別加載兩塊網卡,分別作為路由器的兩個端口 2.實驗在vmware虛擬機中完成 3.另有兩臺CentOS6.8和CentOS7.2作為兩個網段的主機 4.實驗圖示: 二、路由1(左)和路由2(右)的設置 1.路由1配置信息 eth0網卡:    &n…

    Linux干貨 2016-09-07
  • grep正則表達式

    grep:這是一個搜索命令,搜文本并且將文本行顯示出來 (1)grep -i 表示搜索的時候忽略大小寫 (2)grep –colour 表示搜索關鍵字帶顏色 例如:grep –colour ‘root’ /etc/passwd 顯示為在etc的passwd里的 root 選項有顏色 *為了方便我們可以定義個別名,讓他搜索的時候默認顯示為帶顏色 alias…

    Linux干貨 2017-07-29
  • LINUX課堂筆記(第二周)

    2018.03.12 rpm httpd*** service httpd start ab 模仿用戶訪問 cat /var/log/httpd/access_log curl 訪問web服務 rev 字符顛倒顯示 sort ? -r 執行反方向(由上至下)整理 ? -R 隨機排序 ? -n 執行按數字大小整理 ? -f 選項忽略(fold)字符串中的字符大…

    Linux干貨 2018-03-17
  • N25-Bazinga-第三周作業

    N25-Bazinga-第三周作業 1.列出當前系統上登錄的所有用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w | cut -d' ' -f1 | uniq -c |&nbs…

    Linux干貨 2016-12-21
欧美性久久久久