Linux下計划任務和周期性任務設定


Linux任務計划、周期性任務執行

    未來的某時間點執行某任務:at,batch
    周期性運行某任務:crontab
    
        執行結果,會通過郵件發送給用戶
        如果一下2條命令可以看到25端口,則表明郵件服務可用
        ~]# netstat -tnlp
        ~]# ss -tnl
    
    本地電子郵件按服務:    
        smtp:simple mail transmission protocol 發郵件
        pop3:Post Office Procotol 收郵件
        imap4:Internet Mail Access Procotol 收郵件
        
        mail命令:    
            mailx - send and receive Internet mail
            
                MUA:Mail User Agent,用戶收發郵件的工具程序:如outlook,foxmail
                
                mailx [-s 'SUBJECT'] username[@username]
                    郵件正文的生成:    
                        (1)交互式輸入:.單獨成行可以表示正文結束;Ctrl+d提交也可以
                        (2)通過輸入重定向:
                        (3)通過管道:
                        
        at命令:    
            at [OPTION]...time
                TIME:
                    HH:MM
                    noon,midnignt,teatime(下午4點)
                    tomorrow
                    now+#
                        UNIT:minutes,hours,days,OR weeks
                
                at的作業有隊列,用單個字母表示,默認都使用a隊列
                
                常用選項:    
                    -l:查看作業隊列,相當於atq
                    -f /PATH/FROM/SOMEFILE:從指定文件中讀取作業任務,不用交互式輸入
                    -d 作業號:刪除作業,相當於atrm
                    -c:查看指定作業的具體內容
                    -q QUEUE:指名隊列
                注意:作業執行結果是以郵件發送給提交作業的用戶
                
        batch命令:
            batch會讓系統自行選擇在系統資源較空閑的時間去執行制定的任務
        
        周期性任務計划:cron
            服務程序:
                cronie:主程序包,提供了crond守護進程及相關輔助工具
                
            確保crond守護進程(daemon)處於運行狀態
                CentOS 7:
                    systemctl status crond.service
                        Active:active(running)....
                        
                CentOS 6:
                    service crond status
                        ... is running
                    
            向cron提交作業的方式不同於at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件,要使用crontab命令
                cron任務分為兩類:
                    系統cron任務:主要用於實現系統自身的維護
                        手動編輯:/etc/crontab
                    用戶cron任務:
                        命令:crontab
                
                系統cron的配置格式:/etc/crontab
                    SHELL=/bin/bash
                    PATH=/sbin:/bin:/usr/sbin:/usr/bin
                    MAILTO=""

                    # 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)每一行定義一個周期性任務,共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=""

                    # 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
                    # |  |  |  |  |
                    # *  *  *  *  *   command to be executed

                    注意:
                        (1)每一行定義一個周期性任務,共6個字段
                            *  *  *  *  * :定義周期性時間
                            command to be executed:任務
                        (2)此處的環境變量不同於用戶登錄后獲取的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量
                        (3)執行結果郵件發送當前用戶
                        
                時間表示法:
                    (1)特定值:    
                        給定時間點有效取值范圍內的值:
                            注意:day of week和day of month一般不同時使用
                    (2)*
                        給定時間點上有效取值范圍內的所有值:表示“每...”
                    (3)離散取值
                        在時間點上使用逗號分隔的多個值
                            #,#,#
                    (4)連續取值
                        在時間點上使用-連接開頭的結束
                            #-#
                    (5)在指定時間點上,定義步長
                        /#:#即步長
                        
                        注意:
                            (1)指定的時間不能被步長整除是,其意義將不復存在
                            (2)最小時間單位為“分鍾”,想完成“秒”,需要額外借助於其它機制:定義成每分鍾任務:而在利用腳本實現在每分鍾之內,循環執行多次
                        
                示例:    
                    (1)3 * * * *:每小時執行;每小時的第3分鍾
                    (2)3 4 * * 5:每周執行一次,每周5的4點3分
                    (3)3 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:工作時間內的每小時
                    (8)*/5 * * * *:每5分鍾執行一次某任務
                
                crontab命令:
                    crontab [-u user] [-l | -r | -e] [-i]
                        -e:編輯任務
                        -l:列出所有任務
                        -r:移除所有任務;即刪除/var/spool/cron/USERNAME文件
                        -i:在使用-r選項移除所有任務時提示用戶確認
                        -u:root為其它用戶指定cron任務
                        
                注意:運行結果以郵件通知給當前用戶,如果拒絕接收郵件
                    (1)COMMAND >/dev/null
                    (2)COMMAND &>/dev/null
                    
                注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置於單引號中的%不用轉義亦可
                
                思考:
                    某任務在指定的時間因關機未能執行,下次開機會不會自動執行?
                        不會!
                        
        練習:
            (1)每12小時備份一次/etc目錄至/backups目錄中,保存文件格式為“etc/yyyy-mm-dd-hh.tar.xz"
                0 */12 * * * tar -Jcf /backups/etc-$(date +%Y-%m-%d-%H).tar.xz /home/sysfft/
            (2)每周2、4、7備份/var/log/secure文件至/logs目錄中,文件名格式為“secure-yyyymmdd"
                0 0 * * 2,4,7 cp /var/log/secure /logs/secure-$(date +%Y%m%d)
            (3)每兩個小時取出當前系統/proc/meminfo文件中以S或M開頭的行信息追加到/tmp/meminfo.txt文件中
                0 */2 * * * grep ^[S,M] /proc/meminfo >> /tmp/meminfo.txt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM