1. 程式人生 > 其它 >Linux 計劃任務

Linux 計劃任務

計劃任務型別

計劃任務包括兩種型別:

  • 週期性計劃任務(crontab 命令) :每到指定時間點就執行指定的任務,週期性重複執行

  • 一次性計劃任務 (at 命令):未來某個時間執行一次指定任務

crontab 定時器

定時器

crontab 命令允許使用者提交、編輯或刪除相應的作業。每一個使用者都可以有一個 crontab 檔案來儲存排程資訊。可以使用它執行任意一個 shell 指令碼或某個命令。

crontab 命令格式

作用:用於生成 cron 程序所需要的 crontab 檔案

  • -e 編輯定時任務

  • -l 檢視定時任務

  • -r 刪除定時任務

  • -i 刪除定時任務給予提示

# crontab -e
* * * * * /root/shell/if.sh

crontab 檔案格式

minutehourday-of-monthmonth-of-yearday-of-weekcommands
分鐘 小時 命令或指令碼
  • minute 一小時中的哪一分鐘 [0~59]

  • hour 一天中的哪個小時 [0~23]

  • day-of-month 一月中的哪一天 [1~31]

  • month-of-year 一年中的哪一月 [1~12]

  • day-of-week 一週中的哪一天 [0~6] 0表示星期天

  • commands 執行的命令或指令碼

書寫注意事項

  1. 全都不能為空,必須填入,不知道的值使用萬用字元 * 表示任何時間

  2. 每個時間欄位都可以指定多個值,不連續的值用逗號,間隔,連續的值用間隔符-間隔

  3. 命令應該給出絕對路徑

  4. 使用者必須具有執行所對應的命令或程式的許可權

注:whereis 命令:可以檢視命令所在的檔案路徑

at 定時任務

安裝 at 命令

at 定時任務是指定一個時間執行一個任務,只能執行一次,需要安裝 at 命令;

[root@node-01 ~]# yum -y install at
at 命令格式
at [option] TIME
option:
-q QUEUE
-l :列出指定佇列中等待執行的作業(相當於 atq)
-d :刪除指定的作業(相當於 atrm)
-c :檢視具體作業任務
-f :從指定檔案中讀取任務

TIME:
HH:MM [YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now+#{minutes,hours,days, OR weeks}
啟動 at 服務
[root@node-01 ~]# systemctl start atd
[root@node-01 ~]# systemctl enable atd
at 建立任務

使用 at 命令建立的所有任務,都會以檔案的格式儲存在 /var/spool/at/ 目錄下面

  • 方式一:通過 CLI 來配置計劃任務

    1. 直接使用 at 命令指定好時間後,會進入一個 CLI 介面,手動輸入指定時間要執行的操作(可以一直回車指定多項操作),最後使用 Ctrl+D 提交併退出

    [root@node-01 ~]# at 21:25
    at> echo "hello,world"
    at> <EOT>
    job 1 at Tue Mar 9 21:25:00 2021
    1. 使用at -l或者atq命令檢視剛才建立的任務

    [root@node-01 ~]# at -l
    2 Tue Mar 9 21:27:00 2021 a root
    [root@node-01 ~]# atq
    2 Tue Mar 9 21:27:00 2021 a root
    1. 檢視任務執行結果

      at 計劃任務的執行結果都會郵件通知對應的使用者,所以直接檢視 /var/spool/mail/ 目錄下對應使用者檔案的郵件內容或者使用 mail 命令指定編號檢視

    [root@node-01]# cat /var/spool/mail/root 
    From [email protected] Tue Mar 9 21:25:01 2021
    Return-Path: <[email protected]>
    X-Original-To: root
    Delivered-To: [email protected]
    Received: by node-01.localdomain (Postfix, from userid 0)
    id EC49F200F3D3; Tue, 9 Mar 2021 21:25:00 +0800 (CST)
    Subject: Output from your job 1
    To: [email protected]
    Message-Id: <[email protected]>
    Date: Tue, 9 Mar 2021 21:25:00 +0800 (CST)
    From: [email protected] (root)

    hello,world # 定時任務執行結果
  • 方式二:通過讀取檔案中任務列表來建立計劃任務

    1. 使用at -f命令從指定檔案中讀取內容建立任務

    [root@node-01 ~]# echo "您好呀" >> at.txt
    [root@node-01 ~]# at -f at.txt 21:38
    job 3 at Tue Mar 9 21:38:00 2021
    1. 使用at -d命令刪除指定編號任務

    [root@node-01 spool]# atq
    3 Tue Mar 9 21:38:00 2021 a root
    [root@node-01 spool]# at -d 3
    [root@node-01 spool]# atq
  • 方式三:通過 echo 顯示出要執行的內容來建立計劃任務

    [root@node-01 spool]# echo "hello,wolrd" | at 21:40
    job 4 at Tue Mar 9 21:40:00 2021
at 常用時間格式
  1. 指定具體年月日時間來執行

    [root@node-01 ~]# at -f test.txt 20:20 2018-09-05
  2. 指定 10 分鐘之後執行

    [root@node-01 ~]# at -f test.txt now+10minutes
  3. 指定 1 小時之後執行

    [root@node-01 ~]# at -f test.txt now+1hours
  4. 指定 10 天之後執行

    [root@node-01 ~]# at -f test.txt now+10day