linux任務計劃及週期性任務計劃

相關命令:at、batch、cron、mailxcentos

將來某時間執行一次任務:at, batch工具

週期性運行某任務: cronoop

郵件相關命令: mailxspa

  mailx - send and receive Internet mail   code

郵件存放位置:/var/spool/mail
經常使用用法: mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account]
        [-S vari‐able[=value]] to-addr . . .
  簡單用法:mailx [-s 'SUBJECT'] username[@hostname]
         例1: # mailx -s 'hello' root@alen.ckh.centos
             郵件內容
             Ctrl + d //發送郵件

            # mail     //查看當前用戶郵件
            & 數字#    //查看第幾封郵件
            & delete #: //刪除第幾封郵件
            & q      //退出

         例2:# mailx -s 'SUBJECT' hadoop@alen.ckh.centos < mail.txt  //使用重定向的方式發送郵件給hadoop用戶

1、將來某時間執行一次任務:at命令blog

 at, batch, atq, atrm - 排隊、檢查或刪除之後要執行的做業 隊列

at命令經常使用用法:
    at [option] TIME
        TIME:
            HH:MM [YYYY-mm-dd]: 指明時間
            noon,midnight,teatime: 中午十二點,午夜十二點,下午四點
            tomorrow
            now+#{minutes,hours,days,OR weeks}: 某段時間後
          提交做業: ctrl + D
        經常使用選項:
            -q QUEUE:
            -l: 列出指定隊列中等待運行的做業,至關於atq
            -d #: 刪除指定的做業,至關於atrm
            -c #: 查看具體某一條做業任務
            -f  /path/from/somefile:從指定的文件中讀取任務
注意: 做業的執行結果以郵件形式通知給相關用戶

batch命令: 和at命令相似,但不能指明時間點
  讓系統自行選擇空閒時間去執行此處指定的任務  // 不多讓系統本身去選擇時間執行任務

2、週期性任務計劃:cron命令進程

  相關程序包:crontab

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

     cronie-anacron: cronie的補充程序,用於監控conie任務執行情況,若是cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨後啓動一次此任務

     crontabs: 包含CentOS提供系統維護任務

  確保crond守護進程處於運行狀態:  

CentOS7: systemctl status crond   //若是未運行,則運行進程:  systemctl start crond
CentOS6: service crond status     //若是未運行,則運行進程: service crond start

  計劃要週期性執行的任務提交給crond,由其來實現到點運行。   

    系統cron任務: /etc/crontab
    用戶cron任務: crontab命令
系統cron任務
            # 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
例如: 天天晚上九點十分運行echo命令:
    10 21 * * * gentoo /bin/echo "how are you!"

時間表示法 

1.特定值:給定時間點有效取值範圍內的值
2.*:給定時間點上有效取值內的全部值,表示「每...」
3.離散取值,#,#,#
4.連續取值:#-#
5.在指定時範圍上,定義步長:/#,好比分鐘上設置/3表示每3分鐘執行
例如:每3小時echo命令   0 */3 * * * gentoo /bin/echo "how"

用戶cron:

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

crontab [-u user] [-l] [-r] [-e] [-i]
        -l:列出全部任務
        -e:編輯任務
        -r:移除全部任務
        -i:同-r一塊兒使用,以交互模式讓用戶有選擇的移除指定任務
   -u user:僅root可運行,代爲爲指定用戶管理cron任務 注意:運行結果以郵件通知給相關用戶
  1.若是任務正常執行,不想接收郵件:
    (1)COMMAND > /dev/null
     (2)COMMAND &> /dev/null
2.命令最好使用絕對路徑
  3.對於cron任務來講,%有特殊用途;若是在命令中要使用%,則須要轉義;不過,若是把%放置於單引號中,也能夠不用轉義;
如何在秒級別運行任務或不能被60整除的分鐘執行任務:
sleep NUMBER[SUFFIX]...  //s:秒  m:分鐘  h:小時  d:天
* * * * * for min in 0 1 2;do /bin/echo "hi";sleep 20s;done
例1:實現每7分鐘運行一次任務
* * * * * /bin/echo "hi";sleep 7m;

練習:

1.每4小時備份一次/etc目錄至/backup目錄中,保存的文件名稱格式爲「etc-yyyy-mm-dd-HH..tar.xz」

0 */4 * * * tar -Jcf /backup/etc-$(date +%F-%T).tar.xz /etc

2.每週2,4,7備份/var/log/messages文件至/logs目錄中,文件名形如「messages-yyyymmdd.tar.gz」

0 0 * * 2,4,7 tar -zcf /logs/messages-$(date +%Y%m%d).tar.gz /var/log/messages

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

0 */2 * * * cat /proc/meminfo | grep  "^[SM]" >> /tmp/meminfo.txt

4.工做日時間內,每小時執行一次「ip addr show」命令

0 */1 * * 1-5 ip addr show
相關文章
相關標籤/搜索