如何在linux上使用at和batch來排程命令

如果您想安排一個只發生一次的Linux作業,cron就太過了。at系列的命令是你所需要的!如果只想在系統有空閒資源時執行程序,可以使用批處理。...

如果您想安排一個只發生一次的Linux作業,cron就太過了。at系列的命令是你所需要的!如果只想在系統有空閒資源時執行程序,可以使用批處理。

如何安排linux作業

cron守護程序維護它在特定時間執行的作業列表。這些任務和程式按預定時間在後臺執行。這為您安排需要重複的任務提供了極大的靈活性。無論您需要每小時執行一次任務、每天在特定時間執行一次任務,還是每月或每年執行一次任務,都可以在cron中進行設定。

但是,如果您想將一個任務安排為只執行一次,那麼這並沒有幫助。當然,您可以在cron中設定它,但是您必須記住在任務執行後返回並刪除crontab條目,這很不方便。

對於Linux,如果你正在為一個問題而掙扎,這幾乎可以保證其他人也在為這個問題而掙扎。幸運的是,因為類Unix的作業系統已經存在了很長時間,所以很有可能有人已經為您的問題建立了一個解決方案。

對於上面概述的問題,他們有,這是在。

相關:如何在Linux上排程任務:Crontab檔案簡介

安裝at命令

我們必須在ubuntu18.04和manjaro18.1.0上安裝at(它已經安裝在fedora31上了)。

要在Ubuntu上安裝at,請使用以下命令:

sudo apt-get install at

如何在linux上使用at和batch來排程命令

安裝完成後,可以使用以下命令啟動at守護程式:

sudo systemctl enable --now atd.service

如何在linux上使用at和batch來排程命令

在Manjaro上,使用以下命令安裝:

sudo pacman -Sy at

如何在linux上使用at和batch來排程命令

安裝完成後,鍵入以下命令啟動at守護程式:

sudo systemctl enable --now atd.service

如何在linux上使用at和batch來排程命令

在任何發行版上,都可以鍵入以下命令以確保atd守護程式正在執行:

ps -e | grep atd

如何在linux上使用at和batch來排程命令

如何互動使用at命令

要使用at,必須為其指定執行的日期和時間。編寫這些程式碼的方式有很大的靈活性,我們將在本文後面介紹。

但是,即使我們將以互動方式使用at,您也必須預先提供日期和時間。如果在命令列中沒有包含任何內容,或者鍵入的內容不是日期和時間,at將以“亂碼時間”響應,如下所示:

at at banana

如何在linux上使用at和batch來排程命令

日期和時間可以是明確的,也可以是相對的。例如,假設您希望在一分鐘後執行一個命令。at知道“now”是什麼意思,所以您可以使用now並在其中新增一分鐘,如下所示:

at now + 1 minute

如何在linux上使用at和batch來排程命令

at打印出訊息和at提示符,並等待您鍵入要排程的命令。不過,首先要考慮以下資訊:

如何在linux上使用at和batch來排程命令

它告訴您至少啟動一個sh shell例項,並在其中執行命令。您的命令不會在bashshell中執行,bashshell與shshell相容,但具有更豐富的特性集。

如果您的命令或指令碼嘗試使用Bash提供的函式或工具,但sh沒有,它們將失敗。

很容易測試您的命令或指令碼是否將在sh中執行。使用sh命令啟動sh shell:

sh

如何在linux上使用at和batch來排程命令

命令提示符變為美元符號($),現在可以執行命令並驗證它們是否正確執行。

要返回Bash shell,請鍵入exit命令:

exit

您將看不到來自命令的任何標準輸出或錯誤訊息。這是因為sh shell作為後臺任務啟動,執行時沒有任何螢幕介面。

命令輸出的好壞都會透過電子郵件傳送給您。它透過內部郵件系統傳送給執行at命令的人。這意味著您必須設定和配置內部電子郵件系統。

許多(大多數)Linux系統沒有內部電子郵件系統,因為很少需要。那些通常使用sendmail或postfix這樣的系統。如果您的系統沒有內部電子郵件系統,您可以讓指令碼寫入檔案或將輸出重定向到檔案以新增日誌記錄。

如果命令沒有生成任何標準輸出或錯誤訊息,那麼無論如何,您將不會收到電子郵件。許多Linux命令都是透過沉默來表示成功的,所以在大多數情況下,您不會收到電子郵件。

相關:Linux上的stdin、stdout和stderr是什麼?

現在,是時候在中鍵入命令了。對於本例,我們將使用一個名為掃描.sh刪除*.bak、*.tmp和*.o檔案。鍵入命令的路徑,如下所示,然後按Enter鍵。

如何在linux上使用at和batch來排程命令

另一個命令提示符出現,您可以新增任意數量的命令。通常,將命令放在一個指令碼中並從中呼叫該指令碼會更方便。

按Ctrl+D告訴at您已完成新增命令。at顯示<EOT>,表示傳輸結束。系統會告訴您作業編號以及作業計劃執行的時間,如下所示:

如何在linux上使用at和batch來排程命令

作業執行後,鍵入以下內容以檢查內部郵件:

mail

如何在linux上使用at和batch來排程命令

如果沒有郵件,你必須假設成功。當然,在本例中,您可以檢查並檢視*.bak、*.tmp和*.o檔案是否已被刪除,以確認命令是否有效。

鍵入以下內容以再次執行整個過程:

at now + 1 minute

如何在linux上使用at和batch來排程命令

一分鐘後,鍵入以下內容以重新檢查郵件:

mail

如何在linux上使用at和batch來排程命令

嘿,我們收到郵件了!要閱讀第一條資訊,請按1,然後按Enter。

如何在linux上使用at和batch來排程命令

我們收到了來自的電子郵件,因為指令碼中的命令生成了錯誤訊息。在本例中,沒有要刪除的檔案,因為我們以前執行指令碼時,它刪除了這些檔案。

按D+Enter鍵刪除電子郵件,按Q+Enter鍵退出郵件程式。

日期和時間格式

在使用時間格式時,您有很大的靈活性。以下是幾個例子:

  • Run at 11:00 a.m.:
    • 上午11點
  • Run at 11:00 a.m. tomorrow:
    • 明天上午11點
  • Run at 11:00 a.m. on this day next week:
    • 下週上午11點
  • Run at this time, on this day, next week:
    • 下週
  • Run at 11:00 a.m. next Friday:
    • 下週五上午11點
  • Run at this time next Friday:
    • 下週五
  • Run at 11:00 a.m. on this date, next month:
    • 下個月上午11點
  • Run at 11:00 a.m. on a specific date:
    • 2020年3月15日上午11:00
  • Run 30 minutes from now:
    • 現在+30分鐘
  • Run two hours from now:
    • 現在+2小時
  • Run at this time tomorrow:
    • 在明天
  • Run at this time on Thursday:
    • 星期四
  • Run at 12:00 a.m.:
    • 午夜時分
  • Run at 12:00 p.m.:
    • 中午
  • If you’re a Brit, you can even schedule a command to run at teatime (4 p.m.):
    • 茶點時間

檢視作業佇列

您可以鍵入atq命令來檢視計劃作業的佇列,如下所示。

如何在linux上使用at和batch來排程命令

對於佇列中的每個命令,atq顯示以下資訊:

  • 作業ID
  • 預定日期
  • 預定的時間
  • 作業所在的佇列。佇列被標記為“a”、“b”等。用at排程的普通任務進入佇列“a”,而用batch排程的任務(本文後面將介紹)進入佇列“b”
  • 安排工作的人。

在命令列上使用at

您不必以互動方式使用at;也可以在命令上使用它。這使得在指令碼中使用更容易。

您可以將命令匯入at,如下所示:

echo "sh ~/sweep.sh" | at 08:45 AM

如何在linux上使用at和batch來排程命令

作業由at接受並安排,作業編號和執行日期與以前一樣報告。

相關:如何在Linux上使用管道

在命令檔案中使用at

您還可以在檔案中儲存一系列命令,然後將其傳遞給at。它可以是命令的純文字檔案,而不必是可執行指令碼。

可以按以下方式使用-f(檔案)選項將檔名傳遞給:

at now + 5 minutes -f clean.txt

如何在linux上使用at和batch來排程命令

如果將檔案重定向到以下位置,則可以獲得相同的結果:

at now + 5 minutes < clean.txt

如何在linux上使用at和batch來排程命令

從佇列中刪除計劃作業

要從佇列中刪除計劃作業,可以使用atrm命令。如果要首先檢視佇列以查詢要刪除的作業的編號,可以使用atq。然後,將該作業編號與atrm一起使用,如下所示:

atq atrm 11 atq

如何在linux上使用at和batch來排程命令

如何檢視作業的詳細檢視

如前所述,您可以將作業安排到遙遠的將來。有時候,你可能會忘記一份工作要做什麼。atq命令顯示佇列中的作業,但不顯示它們將要執行的操作。如果要檢視作業的詳細檢視,可以使用-c(cat)選項。

首先,我們將使用atq查詢工號:

atq

如何在linux上使用at和batch來排程命令

現在,我們將作業編號13與-c選項一起使用:

at -c 13

如何在linux上使用at和batch來排程命令

以下是我們得到的關於這份工作的詳細資訊:

  • 第一行:這告訴我們命令將在sh shell下執行。
  • 第二行:我們看到命令將在使用者和組ID都為1000的情況下執行。這些是執行at命令的人的值。
  • 第三行:收到任何電子郵件的人。
  • 第四行:使用者掩碼是22。這是用於設定在此sh會話中建立的任何檔案的預設許可權的掩碼。掩碼從666中減去,得到644(八進位制等價於rw-r--r--)。
  • 剩餘資料:大多數是環境變數。

如何在linux上使用at和batch來排程命令

  • 測試的結果。測試檢查以確保可以訪問執行目錄。如果不能,則會引發錯誤,並放棄作業執行。
  • 要執行的命令。將列出這些命令,並顯示計劃的指令碼的內容。注意,儘管上面示例中的指令碼是在Bash下執行的,但它仍將在sh shell中執行。

批處理命令

批處理命令的操作與at命令類似,但有三個顯著區別:

  1. 只能以互動方式使用批處理命令。
  2. 您可以將作業新增到佇列中,當系統的平均負載低於1.5時,批處理命令將執行作業,而不是將作業安排在特定時間執行。
  3. 由於上述原因,您從不使用批處理命令指定日期和時間。

使用批處理命令時,按名稱呼叫它,不帶命令列引數,如下所示:

batch

如何在linux上使用at和batch來排程命令

接下來,像使用at命令一樣新增任務。

控制對at命令的訪問

這個允許以及拒絕檔案控制誰可以使用at系列命令。它們位於/etc目錄中。預設情況下,只有拒絕檔案存在,它是在安裝時建立的。

以下是它們的工作原理:

  • 拒絕:列出無法在處使用來計劃作業的應用程式和實體。
  • 允許:列出可以使用at來安排作業的人員。如果允許檔案不存在,至少只使用拒絕檔案。

預設情況下,任何人都可以使用。如果要限制誰可以使用它,請使用允許列出那些可以的人。這比將不能使用at的所有人新增到拒絕檔案。

這是你的想法拒絕檔案看起來像:

sudo less /etc/at.deny

如何在linux上使用at和batch來排程命令

該檔案列出了作業系統中不能在上使用的元件。由於安全原因,這些檔案中的許多都被阻止這樣做,因此您不想從檔案中刪除任何檔案。

如何在linux上使用at和batch來排程命令

現在,我們將編輯允許檔案。我們要加上戴夫和瑪麗,但不允許其他人使用。

首先,我們鍵入以下內容:

sudo gedit /etc/at.allow

如何在linux上使用at和batch來排程命令

在編輯器中,我們新增兩個名稱,如下所示,然後儲存檔案。

如何在linux上使用at和batch來排程命令

如果有人試圖使用at,他會被告知沒有許可權。例如,假設一個名為eric的使用者鍵入以下內容:

at

他將被拒絕,如下所示。

如何在linux上使用at和batch來排程命令

再說一遍,埃裡克不在辦公室拒絕檔案。一旦你把任何人放進允許任何其他人都被拒絕使用。

一次性很好

如您所見,at和batch都非常適合只需執行一次的任務。再次快速回顧:

  • 當你需要做一些非常規的事情時,用at來安排它。
  • 如果希望僅在系統負載足夠低時執行任務,請使用批處理。
  • 發表於 2021-04-02 18:33
  • 閱讀 ( 67 )
  • 分類:網際網路

你可能感興趣的文章

批(batch)和連續蒸餾(continuous distillation)的區別

...效率很高。 靈活性 分批蒸餾具有很高的靈活性,因為使用一個蒸餾塔可以分離出幾個不同的組分。 連續蒸餾的靈活性較差,因為從混合物中分離出的每種組分都有多個蒸餾塔。 改變混合物 在間歇精餾過程中,當一個批...

  • 發佈於 2020-10-18 21:37
  • 閲讀 ( 48 )

批(batch)和連續發酵(continuous fermentation)的區別

...增營養素和微生物並執行整個過程。它是一個封閉系統,使用的發酵罐相對較大。微生物的生長經歷了滯後期、對數期和固定期。一旦發酵過程完成es,過程停止並收穫產品。下一批前,清洗髮酵罐,重新啟動第二批。 圖01:發...

  • 發佈於 2020-10-18 22:38
  • 閲讀 ( 94 )

作業成本法(job costing)和分批成本法(batch costing)的區別

...本法(batch costing)的區別 分批成本法和分批成本法是企業使用的兩種具體的訂單成本法。當產品彼此不同,或一系列產品由同一家公司生產時,很難使用標準基礎來分配成本。作業成本法和分批成本法為此類企業的成本分配提供...

  • 發佈於 2020-10-25 04:52
  • 閲讀 ( 62 )

批(batch)和連續培養(continuous culture)的區別

... 由於保持了最佳營養水平和其他條件,週轉率很高。 使用發酵罐 大型發酵罐用於分批培養 採用小型發酵罐連續培養。 使用 分批培養髮酵是工業上常用的發酵方法 連續培養髮酵在工業中應用較少。 區域設定 批處理區...

  • 發佈於 2020-10-25 05:38
  • 閲讀 ( 85 )

如何在任何使用python的計算機上安裝selenium webdriver

...lenium WebDriver。在本文中,我們將簡要介紹Selenium,並提供如何在系統上安裝Selenium WebDriver的詳細指南。 ...

  • 發佈於 2021-03-10 21:27
  • 閲讀 ( 61 )

您應該知道的基本windows cmd命令

...符不僅要有一個命令詞典,還要了解每個引數的含義以及如何將不同的引數組合起來以達到預期的效果。 ...

  • 發佈於 2021-03-15 18:07
  • 閲讀 ( 42 )

7款免費聊天應用,用於在手機或電腦上傳送資訊

...仍然是全球最受歡迎的簡訊應用。截至發稿時,其月活躍使用者已超過15億,且增長沒有放緩跡象。 ...

  • 發佈於 2021-03-18 18:55
  • 閲讀 ( 56 )

unix與linux的區別及其重要性

... 現在unix是如何使用的,在哪裡使用的? ...

  • 發佈於 2021-03-19 10:38
  • 閲讀 ( 41 )

如何透過五個簡單步驟建立批處理(bat)檔案

... 在本文中,您將學習如何編寫一個簡單的批處理檔案。您將學習批處理檔案的基本功能以及如何自己編寫它們。我還將為您提供學習編寫批處理(BAT)檔案的更多資源。 ...

  • 發佈於 2021-03-23 08:09
  • 閲讀 ( 46 )

如何檢查linux上安裝了哪個gpu

需要識別Linux計算機中的圖形處理單元(GPU)嗎?下面是如何從命令列和GNOME中識別圖形卡。 第一步 你可能去過那裡。你被徵召來為一個非技術性的親戚或同事提供支援,有些事情告訴你這不是無痛的。不過,你還是加入了!...

  • 發佈於 2021-04-02 16:40
  • 閲讀 ( 52 )
roypfapoh
roypfapoh

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦