Linux 計劃任務
計劃任務型別
計劃任務包括兩種型別:
-
週期性計劃任務(crontab 命令) :每到指定時間點就執行指定的任務,週期性重複執行
-
一次性計劃任務 (at 命令):未來某個時間執行一次指定任務
crontab 定時器
定時器
crontab 命令允許使用者提交、編輯或刪除相應的作業。每一個使用者都可以有一個 crontab 檔案來儲存排程資訊。可以使用它執行任意一個 shell 指令碼或某個命令。
crontab 命令格式
作用:用於生成 cron 程序所需要的 crontab 檔案
-
-e 編輯定時任務
-
-l 檢視定時任務
-
-r 刪除定時任務
-
-i 刪除定時任務給予提示
# crontab -e
* * * * * /root/shell/if.sh
crontab 檔案格式
minute | hour | day-of-month | month-of-year | day-of-week | commands |
---|---|---|---|---|---|
分鐘 | 小時 | 天 | 月 | 周 | 命令或指令碼 |
-
minute 一小時中的哪一分鐘 [0~59]
-
hour 一天中的哪個小時 [0~23]
-
day-of-month 一月中的哪一天 [1~31]
-
month-of-year 一年中的哪一月 [1~12]
-
day-of-week 一週中的哪一天 [0~6] 0表示星期天
-
commands 執行的命令或指令碼
書寫注意事項
-
全都不能為空,必須填入,不知道的值使用萬用字元 * 表示任何時間
-
每個時間欄位都可以指定多個值,不連續的值用逗號,間隔,連續的值用間隔符-間隔
-
命令應該給出絕對路徑
-
使用者必須具有執行所對應的命令或程式的許可權
注: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 來配置計劃任務
-
直接使用 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-
使用
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-
檢視任務執行結果
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 # 定時任務執行結果 -
-
方式二:通過讀取檔案中任務列表來建立計劃任務
-
使用
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-
使用
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 常用時間格式
-
指定具體年月日時間來執行
[root@node-01 ~]# at -f test.txt 20:20 2018-09-05
-
指定 10 分鐘之後執行
[root@node-01 ~]# at -f test.txt now+10minutes
-
指定 1 小時之後執行
[root@node-01 ~]# at -f test.txt now+1hours
-
指定 10 天之後執行
[root@node-01 ~]# at -f test.txt now+10day