linux任務計劃詳解

linux任務計劃、週期性任務執行

未來的某個時間點執行一次某任務:at,batch
週期性運行某任務:crontab
    執行結果:會通過郵件發給用戶
mail 簡單使用
查看本地電子郵件服務是否開啓    
    ~]$ netstat -tnlp
    ~]$ ss -tnl
    確保 127.0.0.1:25 處於監聽狀態就行
本地電子郵件服務:    smtp:simple mail transmission proticol    pop3:post Office Procotol
    imap4:Internet Mail Access procotol
mail命令:
    mailx - send and receive Internet mail    
    MUA:Mail User Agent郵件用戶代理:用戶收發郵件的工具程序
    mailx [-s 'subject'] username[@hostname]
    郵件正文的生成:
        (1)交互式輸入;.單獨成行可以表示正文結束,Ctrl+D提交也可以
        ~]# mail -s 'hello ci'              ci
        hi
        .        EOT
        [root@CentOS6 ~]# 


        (2)通過輸入重定向;
         mail ci < /etc/fstab
        (3)通過管道;
            cat /etc/fstab |mail -s 'fstab file' ci
at命令
at [OPTION]... TIME
    TIME:
        HH:MM[YYYY-mm-dd]
        noon(中午十二點),midnight(午夜十二點),teatime(下午四點),tomorrow
        now+#
            UNIT:minutes,hours,days,OR weeks
                [ci@CentOS6 ~]$ at now+2min
                at> cat /etc/fstab                at> <EOT>
                job 2 at 2016-08-16 10:16
                [ci@CentOS6 ~]$ at -l                2       2016-08-16 10:16 a ci
                [ci@CentOS6 ~]$    
  at的作業有隊列,用單個字母表示,默認使用a隊列
常用選項:
    -l:at -l =atq 查看之前提交的等待執行的作業隊列,執行完成消失  at -f at.tasks now+5min
  -f /path/from/somefile:從指定文件中讀取作業任務,而不用再交互輸入;文件中的內容爲一行行的命令  at -d 3 刪除指定作業號的作業    at -d 3 = atrm 3
  at -c :查看指定作業的具體內容
  -q QUEUE:指明隊列
注意:作業執行結果是以郵件發送給提交作業的用戶
batch命令:
batch會讓系統自行選擇在系統資源空閒的時間去執行指定的任務
週期性任務計劃cron

cron介紹

服務程序:
    cronle程序包:主程序包,提供了crond守護進程及相關輔助工具;
確保crond守護進程(daemon)處於運行狀態
    CentOS 7:
        systemctl status crond.service
        Active:active(running)
            
    CentOS 6:
        service crond status
             ...is running
注意:向crond提交作業的方式不同於at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件。要使用crontab命令;
crontab會提示語法錯誤,

cron任務分爲兩類
    系統cron任務:只要用於實現系統自身的維護;
         手動編輯:/etc/crontab文件
          此種任務基本上不會用到用戶自行修改
    用戶cron任務:
        命令:crontab命令
    系統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
        注意:
            (1)每一行定義一個週期性任務,共7個字段;
                  *  *  *  *  *:定義週期性時間
                  user-name:運行任務的用戶身份
                  command to be executed:任務
            (2)此處的環境變量不同於用戶登陸後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量。
            (3)執行結果郵件發送給MAILTO指定的用戶
    用戶cron的配置格式:/var/spool/cron/USERNAME
        SHELL=/bin/bash
        PATH=/sbin:/bin:/usr/sbin:/usr/bin
        MAILTO=root
        HOME=/        
        # For details see man 4 crontabs
        
        # 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
      注意:
        (1)每行定義一個cron任務,共6個字段
        (2)此處的環境變量不同於用戶登陸後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量。
        (3)郵件是發送給當前用戶

時間表示法:

(1)特定值:
    給定時間點有效取值範圍內的值;
        注意:day or week 和 day of month 一般不同時使用;
(2)*
    給定時間點上有效取值範圍內的所有值;表“每”
(3)指定時間點上的離散取值:
    在給定時間點上使用逗號分隔的多個值;    #,#,#(4)連續取值:-
    在時間點上使用-鏈接開頭和結束    #-#(5)在指定時間點上,定義步長:/#:#即步長
    */2
    注意:
        (1)指定的時間點不能被步長整除時,其意義將不復存在;
        (2)最小時間單位爲“分鐘”,想完成秒級程序任務,得需要額外藉助於其它機制
            定義成每分鐘任務:而在利用腳本實現每分鐘內,循環執行多次;
示例:
(1)3 * * * * :每小時執行一次,每小時的第3分鐘
(2)3 4 * * 5:每週執行一次,每週五4點3分執行;
(3)5 6 7 * * :每月的7號的6點5分
(4)7 8 9 10 *:每年執行一次,每年的10月9號8點7分;
(5)9 8 * * 3,7:每週三和週日的8點9分
(6)0 8,20 * * 3,7:每週三和週日的8點和20點
(7)0 9-18 * * 1-5 :工作時間週一至週五的9點到18點,每小時執行一次
(8)*/5 * * * * :每5分鐘執行一次某任務
(9)77
crontab命令的用法
crontab [-u user] [-l | -r | -e] [-i] [-s]
    -e:編輯任務;    -l:列出所有任務    -r:移除所有任務;即刪除/var/spool/cron/USERNAME文件    -i:在使用-r選項移除所有任務時,提醒用戶確認    -u user:root用戶可爲指定用戶管理cron任務    注意:運行結果以郵件通知當前用戶,如果拒絕收郵件;
    (1)COMMAND > /dev/null
    (2)COMMAND &> /dev/null
注意:定義COMMAND時,如果命令需要用到%,需要對其轉義。但放置於單引號中的%不用轉義亦可;

思考:某任務在指定的時間因關機未能窒息感,下次開機會不會自動執行?

不會,
如果期望某時間因故障未能按時執行,下次開機後無論是否相應時間點都要執行一次,可以使用anacron實現;

練習:

1. 每12小時備份一次/etc目錄至/backup目錄中,保存文件名稱格式爲“etc-yyyy-mm-dd-hh.tar.xz”2.每週2,4,7備份/var/log/secure文件至/logs目錄中,文件格式爲“secure-yyyymmdd'3.每兩小時取出系統/proc/meminfo文件中以S或M開頭的行信息追加至/tmp/meminfo.txt中;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章