Linux計劃任務

Linux任務計劃

Linux任務計劃、周期性執行任務
未來某一時間點執行一次任務:at,batch
周期性計劃任務:crontab
    默認執行結果會通過郵件形式發送給用戶

本地電子郵件服務

smtp:Simple Mail Transfer Protocol,既簡單郵件傳輸協議,主要用于發送郵件
pop3:Post Office Protocol,郵局協議,用于收取郵件
IMAP4:Internet Mail Access Protocol,互聯網郵件訪問協議,其功用和pop3一致

mail命令:
    用于發送或接收互聯網郵件
        MUA:Mail User Agent,用戶收發郵件的工具程序

        mailx [-s "SUBJECT"] username[@hostname]
            郵件正文的生成:
                (1)交互式輸入:.單獨成行可以表示正文結束;Ctrl+d提交
                (2)輸入重定向:
                (3)通過管道;

_[$V]1`UC0C9PAVE48O`[)N.png

7Z5MIMH1BOCJVHD5P2`(ZX9.png

at命令

at [OPTIONS...] TIME
常用選項:
    -l:顯示作業隊列,相當于atq
    -d:刪除指定隊列,相當于atrm
    -c:查看作業的詳細內容
    -m:當任務完成之后,將發郵件給用戶,即使沒有標準輸出
    -V:顯示版本信息
    -f /PATH/TO/SOMEFILE:

    注意:作業執行結果是以郵件發送給提交作業的用戶

TIME:定義出什么時候進行at 這項任務的時間
    HH:MM 02:00
        在今日的HH:MM 進行,若該時刻已過,則明天此時執行任務
    HH:MM YYYY-MM-DD 04:00 2016-09-20
        規定在某年某月的某一天的特殊時刻進行該項任務
    noon, midnight, teatime(4pm)
    tomorrow
    now+#{minutes,hours,days, OR weeks}
        在某個時間點再加幾個時間后才進行該項任務

at的作業有隊列,用單個字母表示,默認都是用a隊列

執行方式:
    1.交互式輸入
    2.輸入重定向,從指定文件中讀取
    3.at -f /PATH/TO/SOMEFILE指定文件

at依賴于atd服務,需要啟動atd服務才可運行at任務
at隊列存放在/var/spool/at目錄當中

at權限控制

/etc/at.{allow,deny}用于控制用戶是否能執行at任務
    白名單:/etc/at.allow默認不存在,只有該文件中的用戶才可執行at任務
    黑名單:/etc/deny拒絕該文件中用戶執行at命令,而沒有在at.deny文件中的用戶則可執行

注意:如果at.deny和at.allow文件中同時定義了一個用戶,則at.allow文件優先生效
注意:如果兩個文件都不存在,則只有root用戶才可執行at任務;或者at.allow文件存在且沒有指定任何用戶

周期性計劃任務:crontab

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

確保crond守護進程(daemon)處于運行狀態;
    CentOS 7:
        systemctl status crond.service
    CentOS 6:
        service crond status
向crond提交作業的方式不用于at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器
    直接編輯此文件;要用crontab命令

cron任務分為兩類:
    系統cron任務:主要用于實現系統自身的維護
        手動編輯:/etc/crontab文件
    用戶cron任務:
        命令:crontab命令

    日志文件:/var/log/cron

系統cron的配置格式:/etc/crontab
    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)每一行定義一個周期性任務;
            * * * * *:定義周期性時間
            user-name:運行任務的用戶身份
            command to be executed:任務
        (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量
        (3)執行結果郵件發送給MAILTO指定的用戶


用戶cron的配置格式:/var/spool/cron/USERNAME
    # 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)特定值;
        給定時間點有效取值范圍內的值;
            注意:days of week和day of month一般不同時使用
    (2)*
        給定時間點上有效取值范圍內的所有值;表"每..."
    (3)離散取值:
        在時間點上使用逗號分隔的多個值;
            #,#,#
    (4)連續取值:-
        在時間點上使用-連接開頭和結束
            #-#
    (5)在指定時間點上,定義步長:
        /#:#即步長;

        注意:
            (1)指定的時間點不能被步長整除時,其意義將不復存在
            (2)最小時間單位為"分鐘",想完成"秒"級任務,得需要借助額外其它機制
               定義成每分鐘任務:而在利用腳本實現在每分鐘內,循環執行多次

示例:
    3 * * * *:每小時的第3分鐘執行任務
    4 5 * * *:每天的5點4分執行任務
    3 4 * * 5:每周5的4點3分執行任務
    5 6 7 * *:每月的7號的6點5分執行任務
    7 8 9 10 *:每年的10月9號8點7分執行任務
    0 8,20 * * 3,7:每周3和周日的8點和20點執行任務
    0 9-18 * * 1-5:周1到周5的9點至18點鐘執行任務
    */5 * * * *:每五分鐘執行

crontab命令:
    crontab [-u user] [-l | -r | -e] [-i] [-s]
        -e:編輯計劃任務
        -l:查看計劃任務
        -r:清空計劃任務
        -i:交互式,當使用-r選項時,提示用戶是否繼續
        -u USER:root用戶可為指定用戶配置cron任務

注意:運行結果以郵件通知給當前用戶;如果拒絕接收郵件
    (1)COMMAND > /dev/null
    (2)COMMAND &> /dev/null

注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%號不用轉義

控制用戶執行cron

/etc/cron.deny:黑名單,此文件中所定義的用戶均不可執行cron任務
/etc/cron.allow:白名單,只有在此文件中定義的用戶才可執行cron任務
    白名單優先級要高于黑名單,默認白名單不存在,如果存在,則只有白名單里定義的用戶才可執行計劃任務
    如果兩個文件都不存在,則只有root用戶才肯執行cron任務

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

(0)
zhai796898zhai796898
上一篇 2016-09-14
下一篇 2016-09-14

相關推薦

  • 進入linux世界的初步認識

    1、 描述計算機的組成及其功能.
    2、 按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別.
    3、 描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述.
    4、 說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述.
    5、 如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的.
    6、 請羅列Linux發行版的基礎目錄名稱命名法則及功用規定.

    Linux干貨 2018-02-25
  • 20160802作業

    20160802作業 1、每日課堂筆記總結 2、預習 3、每日課堂pdf練習 4、在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如: alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 [root@Centos7 ~]# chmod…

    Linux干貨 2016-08-04
  • sed行編輯器

    Linux文本處理三劍客之一:sed(Stream Editor)流編輯器 sed:     將指定的文本文件內容逐行讀取至sed的臨時內存空間當中,稱為"模式空間",而后逐行查看是否被sed的地址定界所匹配到,如果匹配,則執行相應的編輯操作,否則,默認將模式空間中的內容打印至標準輸出  …

    Linux干貨 2016-08-15
  • 正則表達式

    正則表達式課程筆記

    2017-11-05
  • 馬哥教育網絡班22期第5周課程作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; cat /etc/passwd | grep ^root | cut -d: -f7 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); …

    Linux干貨 2016-12-05
  • 馬哥教育網絡班19期+第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin),分別這兩類用戶的個數,通過字符串比較來實現。 #!/bin/bash for user_shell in `awk -F: '{print $7}'&nbsp…

    Linux干貨 2016-07-01
欧美性久久久久