1. 程式人生 > >Linux任務計劃、週期性任務執行

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

目錄

1.at

回顧

參考資料

      未來的某時間點執行一次任務:at, batch

      週期性執行某任務:cron

電子郵件服務

      SMTP:simple mail transmission protocol, 用於傳送郵件

      POP3:Post Office Protocol

      IMAP4:Internet Mail Access Protocol

MUA:Mail User Agent

      mailx - send and receive Internet mail   

            mailx [-s 'SUBJECT'] username[@hostname]

                  郵件正文的生成:

                       ①直接給出,Ctrl+d

                       ②輸入重定向

                       ③通過管道

                             echo -e "How are you?\nHow old are you?" | mail

            mailx

一、一次任務

1.at

      at [option] TIME

                  TIME:

                       HH:MM [YYYY-mm-dd]

                       noon, midnight, teatime

                       tomorrow

                       now+#{minutes,hours,days, OR weeks}

                  常用選項:

                       -q QUEUE

                       -l:列出指定佇列中等待執行的作業;相當於atq

                       -d:刪除指定的作業;相當於atrm

                       -c:檢視具體作業任務

                       -f /path/from/somefile:從指定的檔案中讀取任務

P.S. 作業的執行結果以郵件通知給相關使用者

2.batch

      讓系統自行選擇空閒時間去執行此處指定的任務

二、週期性任務計劃:cron

1.相關的程式包

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

cronie-anacron:cronie的補充程式;用於監控cronie任務執行狀況;如cronie中的任務在過去該執行的時間點未能正常執行,則anacron會隨後啟動一次此任務

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

      如何確保crond守護處於執行狀態

                       CentOS 7:

                             systemctl status crond

                                   ...running...

                       CentOS 6:

                             service crond status

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

            系統cron任務:系統維護作業

                       /etc/crontab

            使用者cron任務:

                       crontab命令

2.系統cron任務

      例如:晚上9點10分執行echo命令;

            10 21 * * *   gentoo /bin/echo "Howdy!"

P.S. 此處命令最好使用絕對路徑

            時間表示法:

①特定值;

                                   給定時間點有效取值範圍內的值

②*

                                   給定時間點上有效取值範圍內的所有值

                                   表示“每...”;

③離散取值:,

                                   #,#,#

④連續取值:-

                                   #-#

在指定時間範圍上,定義步長:

                                   /#:#即為步長

例如:每3小時echo命令;

0 */3 * * * gentoo /bin/echo "howdy!"

3.使用者cron

crontab命令定義,每個使用者都有專用的cron任務檔案:/var/spool/cron/USERNAME

      crontab命令:

            crontab [-u user] [-l | -r | -e] [-i]

                  -l:列出所有任務

                  -e:編輯任務

                  -r:移除所有任務

                  -i:同-r一同使用,以互動式模式讓使用者有選擇地移除指定任務

-u user:僅root可執行,代為為指定使用者管理cron任務

P.S. 執行結果以郵件通知給相關使用者

            ① COMMAND > /dev/null

            ②COMMAND &> /dev/null

對於cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義;不過,如果把%放置於單引號中,也可以不用轉義

思考:

如何在秒級別執行任務?

                  * * * * * for min in 0 1 2; do echo "hi"; sleep 20; done

如何實現每7分鐘執行一次任務?

sleep命令:

                  sleep NUMBER[SUFFIX]...

                                   SUFFIX:

                                         s:秒, 預設

                                         m:分

                                         h:小時

                                         d:天

回顧

      任務計劃:

            一次性執行某任務:at, batch

            週期性執行某任務:crond --> anacron

                  * * * * * COMMAND

參考資料:

馬哥隨堂筆記

注:誠懇歡迎讀者對本文提出批評意見,若發現存在錯誤,我定第一時間修改。如果讀者覺得文章對您有幫助,歡迎點贊鼓勵一下喲٩(๑❛ᴗ❛๑)۶。