一、延時任務
1、概念
延時任務(Delayed Jobs)通常指在指定時間或特定條件滿足后執行的任務。常見的實現方式包括?at
?和?batch
?命令,以及結合?cron
?的調度功能。
2、命令
延時任務的命令最常用的是at命令,第二大節會詳細介紹。其中,atd是延時任務的開啟條件,
systemctl enable --now atd
—— 啟動atd服務并設置開機自啟systemctl status atd.service
—— 檢查atd服務狀態
示例
顯示active和enable字樣代表atd已開啟;?atd 是系統延時任務的守護進程,如果此程序關閉,那么系統延時任務無法使用
二、at命令(延時任務)
1、概念
at
?是 Linux 系統中用于調度一次性任務的命令行工具,允許用戶在指定時間運行命令或腳本。它非常適合臨時任務(如定時重啟服務、發送提醒、執行備份等),且與?cron
(周期性任務)互補。
2、命令
(1)安裝at命令
多數 Linux 發行版默認未安裝?at
,需手動安裝,安裝需要配置軟件倉庫(往期博客有教),各家Linux版本不一樣,會導致安裝at命令也不一樣,以下以rhel紅帽Linux為例(dnf安裝):
dnf install at -y
示例(以rhel紅帽Linux為例)
(2) 常用命令
1)at [時間];同時包含at命令的基本講解
at [時間]
示例
?
?此命令代表在19:20時執行命令(延時命令),輸入完按enter后,就會進入at命令界面(如圖)
此時,在“at>”后輸入你想要的命令,就能延時觸發,如:
輸入完命令后,使用ctrl+d,ctrl+d表示任務錄入結束,時間到時就會執行命令
按ctrl+d后:
我們剛剛執行的at命令是:touch /mnt/file{1..5} —— 即在/mnt下創建文件file1到file5,現在我們使用ls命令去/mnt下面看命令是否已執行(注意:需要時間到了才會執行!像這里的話就要到“19:20”時,touch命令才會執行)
ls /mnt/
示例
?
可以看到文件已創建,說明at命令執行成功
2)at now +?X min
at now +?X min,其中X表示你想要的數字,即你想規定的分鐘(如2min、5min)
at now+5(這里的5可以替換成自己想要的分鐘數)min
示例
?
now表示現在;“+”表示往后增加;5min表示5分鐘
這條命令代表從現在開始五分鐘后執行命令,執行的命令還是touch命令
3)at常用參數表
at
?命令常用參數表
參數 | 說明 | 示例 |
---|---|---|
-m | 即使任務沒有輸出,也發送郵件通知用戶(默認無輸出時不發送)。 | echo "ls" | at -m now +5 minutes |
-M | 與?-m ?相反,禁止發送郵件(即使有輸出)。 | echo "ls" | at -M now +5 minutes |
-v | 顯示任務的計劃執行時間(通常用于調試)。 | at -v 14:30 tomorrow |
-c <任務編號> | 查看指定任務的完整內容(包括環境變量和命令)。 | at -c 3 |
-f <文件> | 從指定文件中讀取要執行的命令(替代交互式輸入)。 | at -f /path/to/script.sh 10:00 AM |
-l | 列出當前用戶的所有待處理任務(等同于?atq )。 | at -l ?或?atq |
-d <任務編號> | 刪除指定任務(等同于?atrm )。 | at -d 3 ?或?atrm 3 |
-q <隊列> | 指定任務隊列(隊列用單個字母表示,默認從?a ?到?z ,優先級遞增)。 | echo "command" | at -q b now +1 hour |
-t <時間戳> | 使用?時間戳?格式([[CC]YY]MMDDhhmm[.ss] )指定時間。 | at -t 202410011430.30 (2024年10月1日14:30:30) |
-V | 顯示?at ?的版本信息。 | at -V |
此表為概括描述,下面會有對其中一些命令的詳細介紹?
4)at -l
????????at -l能查任務列表
at -l
?????????示例
5)at -c
-c查看具體
at -c 2(這個2是任務編號,可以通過at -l命令來查看任務編號,任務編號就是最開頭的數字)
示例
查看任務編號為2的任務具體內容
6) at -r
-r刪除任務
at -r 3(這里的3也是任務號,同理)
示例
?
先用-l查看有的任務(這里是任務號3),然后-r刪除任務3
7)at -m(同時包含-m所需的postfix軟件和s-nail軟件安裝教程)
- postfix軟件和s-nail軟件安裝教程
dnf install postfix.x86_64 s-nail.x86_64 —— 同時安裝postfix軟件和s-nail軟件
示例
我們先安裝postfix軟件(發送郵件程序)和s-nail軟件(查看郵件的程序)
安裝前需要配置軟件倉庫(具體操作可以查看往期博客) -
立即(--now)啟用postfix程序
systemctl enable --now postfix
示例
此時,我們再創一個at命令,命令內容為date(顯示日期)
創建完延時,等時間到了后,輸入mail可以看到改命令
接著輸入進程號(如下圖)
注意:mail界面可按q退出
at -m
示例
?
8)at -d
at -d——刪除指定任務
at -d 3(這里的數字為at任務編號,可以通過at -l查看)
—— 刪除任務編號為3的at任務
我們先創一個at任務來試驗at -d的刪除
用at -l命令查看其任務編號,可以看到是13
隨后我們用at -d刪除該任務
刪除之后再用at -l查看是否還存在此任務
可以看到,任務13已被刪除
9)at -V(大寫)
at -V顯示at版本
at -V
示例
10)at -v(小寫)
at -v查看時間
at -v now+1min
示例
?
(3)at黑/白名單
在 Linux 中,at
?命令的黑白名單通過?/etc/at.allow
?和?/etc/at.deny
?文件實現,用于控制用戶是否有權限使用?at
?調度任務。
先創建一個新的用戶test,方便后續觀察實驗,切換到新的用戶
useradd test
—— 先創建一個新的用戶test
示例?
su test
—— 切換到新的用戶test
示例
完成后開始講解at黑白名單
1)at黑名單
默認狀態下,可以看到,在系統中所有用戶都能執行at任務
那么如何禁止用戶使用at命令呢?這里介紹at黑名單:at任務執行黑名單,在名單中的用戶不能執行at任務
ll /etc/at.deny
—— at任務執行黑名單
示例?
向at黑名單中添加用戶
我們先回到root用戶,來添加黑名單用戶
回到root后,創建打開at黑名單
vim /etc/at.deny
示例?
打開后:
再回到test用戶,此時嘗試at命令,會發現已被禁止使用?
這是因為:在/etc/at.deny文件中出現的用戶是不能執行at任務的
2)at白名單
有黑名單也會有白名單,回到root,創建at白名單
touch /etc/at.allow
示例
at任務白名單,只有在白名單中的用戶可以執行at任務;注意:此名單在系統中不存在,創建后默認root用戶
創建白名單,輸入白名單用戶
vim /etc/at.allow
示例
?創建完白名單后,回到test,發現已經可以使用at命令
注意:當系統中白名單出現,黑名單中的內容將被系統忽略
?
三、定時任務
1、概念
定時任務(計劃任務)是計算機系統中用于在特定時間或周期自動執行指定操作的功能。它廣泛應用于系統維護、數據備份、自動化腳本執行等場景。
四、crontab命令(定時任務)
1、概念
crontab
(Cron Table)是 Linux/Unix 系統中用于管理?周期性任務?的核心工具。通過它可以在固定時間、日期或間隔自動執行命令或腳本(如每日備份、定時清理等)。
2、命令
(1)開啟crond.service的守護進程
crond.service是定時任務的守護進程
systemctl status crond.service
示例
(2)常用命令
?1)crontab -u root -e
以用戶root(-u)來創建定時任務
crontab -u root -e
示例
?
編輯創建定時任務的命令:建立文件file1~5(touch)
2)crontab -l
-l 查看當前定時任務
crontab -l
示例
可以看到在1)中創建的touch命令,其中:
前五顆星號分別代表:
3)crontab -r?
-r 刪除用戶root的定時任務
crontab -r -u root
—— 刪除用戶root的定時任務
示例
?
(3)系統級別crontab目錄詳解
每個目錄的解釋
當我們把要執行的動作記錄為腳本,并把腳本放到相應的目錄中他就會以相應的時間執行?
1)?自定義創建系統級別crontab任務(cron.d)
進入路徑/etc/cron.d
cd /etc/cron.d
?在下圖可以看到,通過ls命令查看是顯示0hourly,說明還未創建自定義crontab任務,所以創建一個crontab任務:
vim lincoln(這里是用戶名)
示例?
進入創建編輯界面后,輸入:
* * * * * root touch /media/lin{1..5}
—— 注意:這里存在之前自己創建的目錄或文件,請自行創建
示例?
?用監視器監視/media路徑,可以看到文件已創建,監視命令:
watch -n 1 ls -l /media/
示例?
?
?
(4)cron黑/白名單
和at命令相似,cron命令也存在黑白名單機制
1)cron黑名單
黑名單阻止黑名單用戶使用cron命令
查看cron黑名單
cat /etc/cron.deny
向cron黑名單中添加用戶?
echo test> /etc/cron.deny
切換用戶測試?
su - testcrontab -e
2)cron白名單?
當白名單出現,只有在名單中單用戶能執行crontab
創建白名單
touch /etc/cron.allow
示例?
在白名單中添加用戶?
echo test>/etc/cron.allow
示例?
切換用戶測試?
su - testcrontab -e
示例
?
發現用戶test已經可以使用cron命令?