如果您想安排一個只發生一次的Linux作業,cron就太過了。at系列的命令是你所需要的!如果只想在系統有空閒資源時執行程序,可以使用批處理。
cron守護程序維護它在特定時間執行的作業列表。這些任務和程式按預定時間在後臺執行。這為您安排需要重複的任務提供了極大的靈活性。無論您需要每小時執行一次任務、每天在特定時間執行一次任務,還是每月或每年執行一次任務,都可以在cron中進行設定。
但是,如果您想將一個任務安排為只執行一次,那麼這並沒有幫助。當然,您可以在cron中設定它,但是您必須記住在任務執行後返回並刪除crontab條目,這很不方便。
對於Linux,如果你正在為一個問題而掙扎,這幾乎可以保證其他人也在為這個問題而掙扎。幸運的是,因為類Unix的作業系統已經存在了很長時間,所以很有可能有人已經為您的問題建立了一個解決方案。
對於上面概述的問題,他們有,這是在。
相關:如何在Linux上排程任務:Crontab檔案簡介
我們必須在ubuntu18.04和manjaro18.1.0上安裝at(它已經安裝在fedora31上了)。
要在Ubuntu上安裝at,請使用以下命令:
sudo apt-get install at安裝完成後,可以使用以下命令啟動at守護程式:
sudo systemctl enable --now atd.service在Manjaro上,使用以下命令安裝:
sudo pacman -Sy at安裝完成後,鍵入以下命令啟動at守護程式:
sudo systemctl enable --now atd.service在任何發行版上,都可以鍵入以下命令以確保atd守護程式正在執行:
ps -e | grep atd要使用at,必須為其指定執行的日期和時間。編寫這些程式碼的方式有很大的靈活性,我們將在本文後面介紹。
但是,即使我們將以互動方式使用at,您也必須預先提供日期和時間。如果在命令列中沒有包含任何內容,或者鍵入的內容不是日期和時間,at將以“亂碼時間”響應,如下所示:
at at banana日期和時間可以是明確的,也可以是相對的。例如,假設您希望在一分鐘後執行一個命令。at知道“now”是什麼意思,所以您可以使用now並在其中新增一分鐘,如下所示:
at now + 1 minuteat打印出訊息和at提示符,並等待您鍵入要排程的命令。不過,首先要考慮以下資訊:
它告訴您至少啟動一個sh shell例項,並在其中執行命令。您的命令不會在bashshell中執行,bashshell與shshell相容,但具有更豐富的特性集。
如果您的命令或指令碼嘗試使用Bash提供的函式或工具,但sh沒有,它們將失敗。
很容易測試您的命令或指令碼是否將在sh中執行。使用sh命令啟動sh shell:
sh命令提示符變為美元符號($),現在可以執行命令並驗證它們是否正確執行。
要返回Bash shell,請鍵入exit命令:
exit您將看不到來自命令的任何標準輸出或錯誤訊息。這是因為sh shell作為後臺任務啟動,執行時沒有任何螢幕介面。
命令輸出的好壞都會透過電子郵件傳送給您。它透過內部郵件系統傳送給執行at命令的人。這意味著您必須設定和配置內部電子郵件系統。
許多(大多數)Linux系統沒有內部電子郵件系統,因為很少需要。那些通常使用sendmail或postfix這樣的系統。如果您的系統沒有內部電子郵件系統,您可以讓指令碼寫入檔案或將輸出重定向到檔案以新增日誌記錄。
如果命令沒有生成任何標準輸出或錯誤訊息,那麼無論如何,您將不會收到電子郵件。許多Linux命令都是透過沉默來表示成功的,所以在大多數情況下,您不會收到電子郵件。
相關:Linux上的stdin、stdout和stderr是什麼?
現在,是時候在中鍵入命令了。對於本例,我們將使用一個名為掃描.sh刪除*.bak、*.tmp和*.o檔案。鍵入命令的路徑,如下所示,然後按Enter鍵。
另一個命令提示符出現,您可以新增任意數量的命令。通常,將命令放在一個指令碼中並從中呼叫該指令碼會更方便。
按Ctrl+D告訴at您已完成新增命令。at顯示<;EOT>;,表示傳輸結束。系統會告訴您作業編號以及作業計劃執行的時間,如下所示:
作業執行後,鍵入以下內容以檢查內部郵件:
mail如果沒有郵件,你必須假設成功。當然,在本例中,您可以檢查並檢視*.bak、*.tmp和*.o檔案是否已被刪除,以確認命令是否有效。
鍵入以下內容以再次執行整個過程:
at now + 1 minute一分鐘後,鍵入以下內容以重新檢查郵件:
mail嘿,我們收到郵件了!要閱讀第一條資訊,請按1,然後按Enter。
我們收到了來自的電子郵件,因為指令碼中的命令生成了錯誤訊息。在本例中,沒有要刪除的檔案,因為我們以前執行指令碼時,它刪除了這些檔案。
按D+Enter鍵刪除電子郵件,按Q+Enter鍵退出郵件程式。
在使用時間格式時,您有很大的靈活性。以下是幾個例子:
您可以鍵入atq命令來檢視計劃作業的佇列,如下所示。
對於佇列中的每個命令,atq顯示以下資訊:
您不必以互動方式使用at;也可以在命令上使用它。這使得在指令碼中使用更容易。
您可以將命令匯入at,如下所示:
echo "sh ~/sweep.sh" | at 08:45 AM作業由at接受並安排,作業編號和執行日期與以前一樣報告。
相關:如何在Linux上使用管道
您還可以在檔案中儲存一系列命令,然後將其傳遞給at。它可以是命令的純文字檔案,而不必是可執行指令碼。
可以按以下方式使用-f(檔案)選項將檔名傳遞給:
at now + 5 minutes -f clean.txt如果將檔案重定向到以下位置,則可以獲得相同的結果:
at now + 5 minutes < clean.txt要從佇列中刪除計劃作業,可以使用atrm命令。如果要首先檢視佇列以查詢要刪除的作業的編號,可以使用atq。然後,將該作業編號與atrm一起使用,如下所示:
atq atrm 11 atq如前所述,您可以將作業安排到遙遠的將來。有時候,你可能會忘記一份工作要做什麼。atq命令顯示佇列中的作業,但不顯示它們將要執行的操作。如果要檢視作業的詳細檢視,可以使用-c(cat)選項。
首先,我們將使用atq查詢工號:
atq現在,我們將作業編號13與-c選項一起使用:
at -c 13以下是我們得到的關於這份工作的詳細資訊:
批處理命令的操作與at命令類似,但有三個顯著區別:
使用批處理命令時,按名稱呼叫它,不帶命令列引數,如下所示:
batch接下來,像使用at命令一樣新增任務。
這個允許以及拒絕檔案控制誰可以使用at系列命令。它們位於/etc目錄中。預設情況下,只有拒絕檔案存在,它是在安裝時建立的。
以下是它們的工作原理:
預設情況下,任何人都可以使用。如果要限制誰可以使用它,請使用允許列出那些可以的人。這比將不能使用at的所有人新增到拒絕檔案。
這是你的想法拒絕檔案看起來像:
sudo less /etc/at.deny該檔案列出了作業系統中不能在上使用的元件。由於安全原因,這些檔案中的許多都被阻止這樣做,因此您不想從檔案中刪除任何檔案。
現在,我們將編輯允許檔案。我們要加上戴夫和瑪麗,但不允許其他人使用。
首先,我們鍵入以下內容:
sudo gedit /etc/at.allow在編輯器中,我們新增兩個名稱,如下所示,然後儲存檔案。
如果有人試圖使用at,他會被告知沒有許可權。例如,假設一個名為eric的使用者鍵入以下內容:
at他將被拒絕,如下所示。
再說一遍,埃裡克不在辦公室拒絕檔案。一旦你把任何人放進允許任何其他人都被拒絕使用。
如您所見,at和batch都非常適合只需執行一次的任務。再次快速回顧:
...效率很高。 靈活性 分批蒸餾具有很高的靈活性,因為使用一個蒸餾塔可以分離出幾個不同的組分。 連續蒸餾的靈活性較差,因為從混合物中分離出的每種組分都有多個蒸餾塔。 改變混合物 在間歇精餾過程中,當一個批...
...增營養素和微生物並執行整個過程。它是一個封閉系統,使用的發酵罐相對較大。微生物的生長經歷了滯後期、對數期和固定期。一旦發酵過程完成es,過程停止並收穫產品。下一批前,清洗髮酵罐,重新啟動第二批。 圖01:發...
...本法(batch costing)的區別 分批成本法和分批成本法是企業使用的兩種具體的訂單成本法。當產品彼此不同,或一系列產品由同一家公司生產時,很難使用標準基礎來分配成本。作業成本法和分批成本法為此類企業的成本分配提供...
... 由於保持了最佳營養水平和其他條件,週轉率很高。 使用發酵罐 大型發酵罐用於分批培養 採用小型發酵罐連續培養。 使用 分批培養髮酵是工業上常用的發酵方法 連續培養髮酵在工業中應用較少。 區域設定 批處理區...
...lenium WebDriver。在本文中,我們將簡要介紹Selenium,並提供如何在系統上安裝Selenium WebDriver的詳細指南。 ...
...符不僅要有一個命令詞典,還要了解每個引數的含義以及如何將不同的引數組合起來以達到預期的效果。 ...
...仍然是全球最受歡迎的簡訊應用。截至發稿時,其月活躍使用者已超過15億,且增長沒有放緩跡象。 ...
... 在本文中,您將學習如何編寫一個簡單的批處理檔案。您將學習批處理檔案的基本功能以及如何自己編寫它們。我還將為您提供學習編寫批處理(BAT)檔案的更多資源。 ...
需要識別Linux計算機中的圖形處理單元(GPU)嗎?下面是如何從命令列和GNOME中識別圖形卡。 第一步 你可能去過那裡。你被徵召來為一個非技術性的親戚或同事提供支援,有些事情告訴你這不是無痛的。不過,你還是加入了!...