計劃任務和周期性任務

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 20:34
下一篇 2016-09-12 20:44

相關推薦

  • rsyslog日志存儲到mysql數據庫中并利用loganalyzer進行web圖形化分析管理

    概述     系統日志的重要性,相信大家都深有體會,當發生故障后,第一時間就是查看相關報錯信息和日志信息,以定位問題所在,還可以基于日志,進行日志的分析,從而獲取系統運行狀態的一些規律,本篇就介紹關于系統日志的先關內容,具體分為:     1、rsyslog相關概念的介紹 &nb…

    Linux干貨 2016-10-18
  • Centos7基于虛擬主機的Lamp配置bbs、Blog、PhpMyAdmin應用程序

    Centos7實現基于虛擬主機的各應用程序搭建: 一、配置三個基于名稱的虛擬主機;      (a) discuzX      (b) wordpress      (c) https: phpMyAdmin 1.安裝Lamp環境及安裝mo…

    Linux干貨 2016-10-09
  • linux目錄基礎、簡單的命令以及運用linux幫助

    計算機組成及其功能     計算機其實是:接收用戶輸入指令與數據,經過中央處理器的數據與邏輯單元運算處理后,以產生或存儲成有用的信息。所以計算機組成可以分為輸入單元、輸出單元、CPU(控制單元、算術邏輯單元)、內存     輸入單元:包括鍵盤、鼠標、掃描儀、手寫板、觸摸屏等;實現…

    Linux干貨 2016-09-17
  • 第五周作業

    1、顯示當前系統上root,fedora或user1用戶的默認shell。 [root@hostname ~]# grep -E ‘^(root|fedora|user1)’ /etc/passwd | cut -d: -f1,7 root:/bin/bash 2、找出/etc/rc.d/init.d/functions文件中某詞后面跟一組小括號的行,形如:…

    Linux干貨 2017-08-04
  • Linux下搭建路由器

    客戶端1:CentOS6.9 客戶端2:CentOS7.3 路由器:router1(CentOS7.3)、router2(CentOS7.3) r router3(CentOS7.3) 1 準備工作 為了避免干擾,最好建立獨立的網絡。 打開VMvare的虛擬網絡編輯器,點擊添加網絡按鈕,添加VMnet11并且將左下角使用“本地DHCP服務將IP地址分配給虛擬…

    Linux干貨 2017-08-20
  • Linux磁盤管理

    設備文件 一切皆文件 open(), read(), write(), close() 磁盤結構 磁盤接口類型 并行 IDE:133MB/s SCSI:640MB/s 串口 SATA:6Gbps SAS:6Gbps USB:480MB/s rpm rotationsper minute 硬盤每分鐘轉數 硬盤結構  圖一…

    Linux干貨 2016-08-30
欧美性久久久久