Linux中國

用 Linux 的 at 命令來安排一個任務

計算機擅長 自動化,但不是每個人都知道如何使自動化工作。不過,能夠在特定的時間為電腦安排一個任務,然後忘記它,這確實是一種享受。也許你有一個文件要在特定的時間上傳或下載,或者你需要處理一批還不存在但可以保證在某個時間存在的文件,或者需要監控設置,或者你只是需要一個友好的提醒,在下班回家的路上買上麵包和黃油。

這就是 at 命令的用處。

什麼是 Linux at 命令?

at 命令是在 Linux 終端讓你在特定時間和日期安排一次性工作的方法。它是一種自發的自動化,在終端上很容易實現。

安裝 at

在 Linux 上,at 命令可能已經安裝了。你可以使用 at -V 命令來驗證它是否已經安裝。只要返回一個版本號,就說明你已經安裝了 at

$ at -V
at version x.y.z

如果你試圖使用 at,但沒有找到該命令,大多數現代的 Linux 發行版會為你提供缺少的 at 軟體包。

你可能還需要啟動 at 守護程序,稱為 atd。在大多數 Linux 系統中,你可以使用 systemctl 命令來啟用該服務,並將它們設置為從現在開始自動啟動:

$ sudo systemctl enable --now atd

用 at 互動式地安排一個作業

當你使用 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> <EOT>
job 3 at Mon Jul 26 11:20:00 2021

正如你所看到的,at 使用直觀和自然的時間定義。你不需要用 24 小時制的時鐘,也不需要把時間翻譯成 UTC 或特定的 ISO 格式。一般來說,你可以使用你自然想到的任何符號,如 noon1:30 PM13:37 等等,來描述你希望一個任務發生的時間。

等待幾分鐘,然後在你創建的文件上運行 cat 或者 tac 命令,驗證你的任務是否已經運行:

$ cat ~/at-test.txt
hello world

用 at 安排一個任務

你不必使用 at 互動式提示符來安排任務。你可以使用 echoprintf 向它傳送命令。在這個例子中,我使用了 now 符號,以及我希望任務從現在開始延遲多少分鐘:

$ echo "echo &apos;hello again&apos; >> ~/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,並且正在安排任務,而不是在桌子上的廢紙上亂寫亂畫,你可能想查看一下你是否有任務還在隊列中。

要查看你的 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 任何任務的內容。

用 Linux at 安排任務

at 系統是一個很好的方法,可以避免忘記在一天中晚些時候運行一個作業,或者在你離開時讓你的計算機為你運行一個作業。與 cron 不同的是,它不像 cron 那樣要求任務必須從現在起一直按計劃運行到永遠,因此它的語法比 cron 簡單得多。

等下次你有一個希望你的計算機記住並管理它的小任務,試試 at 命令。

via: https://opensource.com/article/21/8/linux-at-command

作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國