Linux任務計劃


    任務計劃分類:
    一次性任務計劃:只執行一次就結束                at batch
    周期性任務計劃:每隔一定的周期去做相同的事情    cron

    作業的執行結果以郵件通知給相關用戶
    mail- send and receive internet mail  使用mail命令查看用戶郵件

    (1)at命令:
        at [option] TIME
        option:
            -l: 列出指定隊列中等待運行的作業;相當于atq
            -d: 刪除指定的作業;相當于atrm
            -c: 查看具體作業任務
            -f /path/from/somefile:從指定的文件中讀取任務 -m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出
    
        TIME:定義出什么時候進行 at 這項任務的時間
            HH:MM [YYYY-mm-dd]
            HH:MM  02:00 在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務
            HH:MM[am|pm] + number [minutes|hours|days|weeks]

        執行方式:
            1、交互式2、輸入重定向3、at -f文件
            at 交互模式下是不是輸錯一次就要推倒重來
            不需要,ctrl+backspace 可以退格
        
        附加知識點:
        1、at隊列存放在/var/spool/at目錄中
        
        2、黑白名單
        白名單/etc/at.allow默認不存在
        黑名單/etc/at.deny默認存在
        只要/etc/at.allow存在,則只有該文件中的用戶和root可以執行at命令(此時deny文件可以視為無效)
        如果/etc/at.allow不存在,
        1)/etc/at.deny存在,只有deny文件中的用戶被拒絕執行at命令
        2)/etc/at.deny不存在,只有root用戶可以執行at命令

      (2)batch命令:
          讓系統自行選擇空閑時間去執行此處指定的任務

      (3)cron
          相關程序包:cronie,cronie-anacron,crontabs
          確保crond守護進程處于運行狀態:
          centos 7:systemctl status crond
          centos 6:service crond status

          3.1系統cron任務
          編輯/etc/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
              例如:晚上9點10分運行echo命令:
                  10 21 * * * gentoo /bin/echo “Howdy!”

              時間表示法:
                  1、特定值
                      給定時間點有效取值范圍內的值
                  2、*
                      給定之間點上有效取值范圍內的所有值
                  3、離散取值:,
                      #,#,#
                  4、連續取值:-
                      #-#
                  5、在指定時間范圍上,定義步長:
                      /#:#即為步長

                  示例:每3小時echo命令:
                      * */3 * * * gentoo /bin/echo “howdy!”錯誤
                      較小的時間范圍需要指定特定的時間,否則相當于小時間范圍內全部取值均執行
                      1 */3 * * * gentoo /bin/echo “howdy!”

                  @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 * * * *
                  注:上面其中表達方式可以用來代替五顆星的位置

          3.2用戶cron任務:
            crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME

            crontab  [-u user] [-l|-r|-e] [-i]
                -l:列出所有任務
                -e:編輯任務
                -r:移除所有任務
                -i:同-r一同使用,交互式模式讓用戶有選擇地移除指定任務
                注:在所有任務中去刪除特定任務,也可以crontab -e打開編輯器,刪除特定行即可          
                -u user:root用戶專用,代為為指定用戶管理cron任務

         at和crontab
           一次性作業使用at
           重復性作業使用crontab
           沒有被重定向的輸出會被郵寄給用戶
           根用戶能夠修改其他用戶的作業

    注意:
    1)運行結果標準輸出和錯誤以郵件通知給相關用戶;
    2)對于cron任務來講,%有特殊用途,在命令中要使用%,則需要轉義;單引號隔絕引用,使用單引號不用轉義

    練習:

      1、每天的2點和12點整,將/etc備份至/testdir/backup目 錄中,保存的文件名稱格式為“etcbak-yyyy-mm-ddHH.tar.xz”

    mkdir /testdir/backup
    crontab -e
    0 2,12 * * * /bin/tar -Jcf /testdir/backup/etcbak-`date +'%F'`.tar.xz /etc

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

    mkdir /logs
    crontab -e
    0 0 * * 2,4,7 /var/log/messages /logs/messages-$(date +'%Y%m%d')

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

    crontab -e
    1 */2 * * * /bin/grep -E "^(S|M)" /proc/meminfo >>/meminfo.txt

    4、工作日時間內,每小時執行一次“ip addr show”命令

    crontab -e
    1 * * * 1-5 /sbin/ip addr show 

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

    cd /bin
    vim chkdisk.sh
    block_used=df|grep -E "^/dev/sd"|tr -s " "|cut -d" " -f5|cut -d% -f1
    inode_used=df -i|grep -E "^/dev/sd"|tr -s " "|cut -d" " -f5|cut -d% -f1
    if [ block_used -gt 80 || inode_used -gt 80 ];then
        wall disk is full
    fi
    chmod +x chkdisk.sh
    crontab -e
    */10 * * * * chkdisk.sh 

    想了一下,這種方法是有缺陷的。當多個磁盤使用率同時超過80%時,無法進行正確的判斷

    注意:使用which或者whereis可以查詢命令的絕對路徑,用來幫助寫cron任務計劃。

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

(0)
marumaru
上一篇 2017-05-08 22:58
下一篇 2017-05-09 08:12

相關推薦

  • IP地址的三種表示格式及在Socket編程中的應用

       使用TCP/IP協議進行網絡應用開發的朋友首先要面對的就是對IP地址信息的處理。IP地址其實有三種不同的表示格式:        1)Ascii(網絡點分字符串)-        2) 網絡地址(32位無符號整形,網絡字節序,大頭) &nbsp…

    Linux干貨 2015-04-10
  • N22-妙手-第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現;: #!/bin/bash # declare -i numberOfLoginUser=0 declare -i numberOfUnloginUs…

    Linux干貨 2016-10-19
  • 初學Linux之文件查找和壓縮

    使用locate命令 ,使用find命令 ,壓縮和解壓縮工具

    2018-01-13
  • Shell腳本編程—特殊用法(select)及函數、遞歸

    Shell腳本編程—特殊用法及函數   一、while的特殊用法: 1、使用格式: while read 變量名;do    循環體 done </PATH/TO/filename 注:依次從指定的文件中的內容逐行讀取,并把讀取到的每行賦值給變量。 2、例題: 掃描/etc/passwd文件每一行,如發現GECOS字段為空…

    Linux干貨 2016-08-21
  • 如何監控Linux文件系統事件:inotify使用指南

    如何監控Linux文件系統事件:inotify使用指南 §·inotify初識 Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,并且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,并發現一組可用來進一步自動化系統治理的命令行工具。 §·inoti…

    Linux干貨 2016-10-30
  • 第8天:腳本基礎,btrf,raid,

    http://note.youdao.com/yws/public/redirect/share?id=61b38adef24ced4dc646a5ef8e68df18&type=false

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