如何用Linux的at命令安排一個任務
導讀 | at 是一種在特定時間和日期安排一次性任務的 終端方法。 |
計算機擅長自動化,但不是每個人都知道如何使自動化工作。不過,能夠在特定的時間為電腦安排一個任務,然後忘記它,這確實是一種享受。也許你有一個檔案要在特定的時間上傳或下載,或者你需要處理一批還不存在但可以保證在某個時間存在的檔案,或者需要監控設定,或者你只是需要一個友好的提醒,在下班回家的路上買上面包和黃油。
這就是at 的用處。
at 命令是在 Linux 終端讓你在特定時間和日期安排一次性工作的方法。它是一種自發的自動化,在終端上很容易實現。
在 Linux 上,at 命令可能已經安裝了。你可以使用 at -V 命令來驗證它是否已經安裝。只要返回一個版本號,就說明你已經安裝了 at。
$ at -Vat version x.y.z
如果你試圖使用 at,但沒有找到該命令,大多數現代的 Linux 發行版會為你提供缺少的 at 軟體包。
你可能還需要啟動 at 守護程式,稱為 atd。在大多數 Linux 系統中,你可以使用 systemctl 命令來啟用該服務,並將它們設定為從現在開始自動啟動:
$ sudo systemctl enable --now atd
當你使用 at 命令並加上你希望任務執行的時間,會開啟一個互動式 at 提示符。你可以輸入你想在指定時間執行的命令。
做個比喻,你可以把這個過程看作是一個日曆應用,就像你在你的手機上使用的那樣。首先,你在某一天的某個時間建立一個事件,然後指定你想要發生什麼。
例如,可以試試建立一個未來幾分鐘的任務,來給自己計劃一個備忘錄。這裡執行一個簡單的任務,以減少失敗的可能性。要退出 at 提示符,請按鍵盤上的 Ctrl+D。
$ at 11:20 AM warning: commands will be executed using /bin/sh at> echo "hello world" > ~/at-test.txt at>job 3 at Mon Jul 26 11:20:00 2021
正如你所看到的,at 使用直觀和自然的時間定義。你不需要用 24 小時制的時鐘,也不需要把時間翻譯成 UTC 或特定的 ISO 格式。一般來說,你可以使用你自然想到的任何符號,如 noon、1:30 PM、13:37 等等,來描述你希望一個任務發生的時間。
等待幾分鐘,然後在你建立的檔案上執行 cat 或者 tac 命令,驗證你的任務是否已經執行:
$ cat ~/at-test.txt hello world
你不必使用 at 互動式提示符來安排任務。你可以使用 echo 或 printf 向它傳送命令。在這個例子中,我使用了 now 符號,以及我希望任務從現在開始延遲多少分鐘:
$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute
一分鐘後,驗證新的命令是否已被執行:
$ cat ~/at-test.txt hello world hello again
at 命令在解釋時間時是非常寬容的。你可以在許多格式中選擇,這取決於哪一種對你來說最方便:
YYMMDDhhmm[.ss](兩位的年份、月、日、小時、分鐘,及可選的秒)
CCYYMMDDhhmm[.ss](四位的年份、月、日、時、分鐘,及可選的秒)
now(現在)
midnight(午夜 00:00)
noon(中午 12:00)
teatime(下午 16 點)
AM(上午)
PM(下午)
時間和日期可以是絕對時間,也可以加一個加號(+),使其與 now 相對。當指定相對時間時,你可以使用你可能用過的詞語:
minutes(分鐘)
hours(小時)
days(天)
weeks(星期)
months(月)
years(年)
at 命令對時間的輸入相比日期不那麼寬容。時間必須放在第一位,接著是日期,儘管日期預設為當前日期,並且只有在為未來某天安排任務時才需要。
這些是一些有效表示式的例子:
$ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow $ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 08/01/2022 $ echo "echo hello" | at now + 3 days
當你愛上了 at,並且正在安排任務,而不是在桌子上的廢紙上亂寫亂畫,你可能想檢視一下你是否有任務還在佇列中。
要檢視你的 at 佇列,使用 atq 命令:
$ atq 10 Thu Jul 29 12:19:00 2021 a tux 9 Tue Jul 27 03:30:00 2021 a tux 7 Tue Jul 27 00:00:00 2021 a tux
要從佇列中刪除一個任務,使用 atrm 命令和任務號。例如,要刪除任務 7:
$ atrm 7 $ atq 10 Thu Jul 29 12:19:00 2021 a tux 9 Tue Jul 27 03:30:00 2021 a tux
要看一個計劃中的任務的實際內容,你需要檢視 /var/spool/at 下的內容。只有 root 使用者可以檢視該目錄的內容,所以你必須使用 sudo 來檢視或 cat 任何任務的內容。
at 系統是一個很好的方法,可以避免忘記在一天中晚些時候執行一個作業,或者在你離開時讓你的計算機為你執行一個作業。與 cron 不同的是,它不像 cron 那樣要求任務必須從現在起一直按計劃執行到永遠,因此它的語法比 cron 簡單得多。
等下次你有一個希望你的計算機記住並管理它的小任務,試試 at 命令。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2791852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Linux中如何使用at命令安排任務Linux
- linux實現一個定時任務Linux
- 教你如何使用 cron 來安排任務
- 如何用crontab每隔1分鐘執行一個命令列指令碼,shell設定時任務命令列指令碼
- Linux基礎命令---cancel取消列印任務Linux
- Linux基礎命令---lpstat檢視列印任務Linux
- Linux基礎命令---lprm刪除列印任務Linux
- Linux下的crontab定時執行任務命令詳解Linux
- 使用 Calcurse 在 Linux 命令列中組織任務Linux命令列
- 佇列Queue:任務間的訊息讀寫,安排起來~佇列
- 大領導給小明安排任務——Android觸控事件Android事件
- 如何高效完成領導安排的複雜工作任務?羅列待辦任務清單很有效
- 學習一個 Linux 命令:shutdown 命令Linux
- linux最常用的20個命令(一)Linux
- 基於Hyperf開發的任務排程系統.支援任務投遞,DAG任務編排(多個任務使用同一個事務).
- [Linux常用命令之定時任務Crontab命令] 2018-10-12Linux
- 大領導又給小明安排任務——Android觸控事件Android事件
- 每天一個Linux命令(6):rmdir命令Linux
- 每天一個Linux命令(5):rm命令Linux
- 每天一個Linux命令(2):shutdown命令Linux
- 每天一個 Linux 命令(12):more 命令Linux
- 每天一個 Linux 命令(16):which 命令Linux
- Linux的幾個新手必備的命令(一)Linux
- Linux 定時任務Linux
- Linux | 定時任務Linux
- 學習一個 Linux 命令:pstreeLinux
- 如何寫一個任務佇列佇列
- 前端如何用node開啟一個服務前端
- Linux任務的前後臺管理Linux
- coleifer/huey:python 的一個小任務佇列Python佇列
- 天生創想OA任務管理系統:對任務進展情況瞭如指掌
- PowerShell中呼叫GPU命令通常涉及到與GPU相關的任務,如檢視GPU資訊、管理GPU驅動、執行GPU加速的計算任務等。以下是一些常見的PowerShell中呼叫GPU命令GPU
- 如何用Nginx快速搭建一個安全的微服務架構Nginx微服務架構
- 如何用Nginx搭建一個安全的、快速的微服務架構Nginx微服務架構
- 新公司的第一個任務-重構系統(一)
- 洛谷P2365/5785 任務安排 題解 斜率優化DP優化
- 每天一個linux命令(1):find命令之execLinux
- 任務一