使用 Systemd 計時器取代 Cron 作業

使用 Systemd 計時器取代 Cron 作業
一位女士在筆記型電腦前拿著鬧鐘的照片。

作為 Linux 用戶,您可能熟悉 cron。多年來,它一直是首選的 Unix 基於時間的作業排程器。現在很多用戶正在使用Systemd計時器來取代cron的統治地位。本文將討論如何設定您自己的 systemd 計時器並確保它在您的系統上正常運作的基礎知識。

為什麼要使用 Systemd 定時器而不是 Cron?

Systemd Timers 最大的賣點之一是它完全整合到 Systemd 生態系統中。這意味著可以非常輕鬆地調度和連結各種 Systemd 服務單元,與傳統的 cron 守護程式相比,更容易實現任務自動化。

使用 Systemd 計時器顯示系統服務的終端。

Systemd Timers 相對於 Cron 的另一個優點是它提供瞭如何觸發排程作業的更詳細的控制。例如,Systemd Timers 有一個OnBootSec變量,它允許您延遲服務單元,直到成功啟動後經過一定的時間。

顯示具有特殊觸發變數的範例計時器配置的終端。

最後,與標準 cron 守護程式相比,Systemd 計時器也非常準確。預設情況下,它可以使用其變數來追蹤和運行作業長達一微秒AccuracySec。如果您執行的電腦需要精確執行排程任務的時間,這將非常有用。

安裝 Systemd 定時器

定時器是 Systemd 的內建函數。這意味著,如果您使用 Systemd 作為 init 守護進程,就像流行的 Linux 發行版(例如 Arch、Fedora 和 Ubuntu)一樣,您的電腦已經在其某些系統進程上利用了此功能。

若要檢查您的發行版是否正在執行 Systemd,您可以執行以下命令:

執行此操作將列出系統上目前運行的所有 Systemd 單元、裝置和計時器。

顯示基於 Systemd 的 Linux 發行版上的 systemctl 指令輸出的終端機。

列出現有定時器

檢查計時器是否在目前使用者帳戶上運行的最簡單方法是使用以下命令:

您也可以使用該--all標誌來檢查系統中的每個計時器,包括不活動的計時器:

執行此操作將列印每個計時器將啟動的日期和時間、該點之前的倒數計時、自上次運行以來已經過去了多少時間、計時器本身的單元名稱以及每個計時器單元啟動的服務。

列出目前會話中所有正在執行的 Systemd 計時器的終端機。

建立新服務和計時器

製作 Systemd 計時器的第一步是建立或尋找現有服務以將其附加到。這是因為每個計時器都需要附加到父服務單元。本節將引導您完成為自訂 Systemd 服務建立計時器的過程。

首先在您的主目錄中建立空白的「.service」和「.timer」檔案:

使用您最喜歡的文字編輯器開啟新的服務文件:

將以下範本貼到新服務文件中:

儲存“.service”文件,然後使用相同的文字編輯器開啟空白“.timer”文件:

將以下程式碼區塊貼到計時器檔案中:

轉到[Timer]部分,然後將變數的值替換OnCalendar為您希望 Systemd 單元運行的日期和時間。就我而言,我希望程式在每天上午 11:43 準時運行。

反白顯示 OnCalendar 變數的自訂計時器值的終端。

建立單調計時器

除了設定在特定日期運行的計時器之外,還可以建立相對於電腦目前正常運作時間運作的單調計時器。如果您要在不經常運行的電腦(例如桌上型電腦或筆記型電腦)上排程任務,這非常有用。

首先,開啟“.timer”文件,然後向下捲動到該[Timer]部分。

突出顯示位置的終端

刪除OnCalendarPersistent變量,然後添加OnBootSec後跟要運行單元文件的時間間隔。例如,將其設定為「1hr」將告訴 Systemd 在電腦成功啟動一小時後啟動命令。

終端機突出顯示 OnBootSec 變量,取代自訂計時器檔案的原始計時變數。

添加OnUnitActiveSec下面的變量OnBootSec,然後提供您希望計時器在系統啟動後連續運行的時間間隔。就我而言,我將其設置為“30 分鐘”,因為我希望任務在首次運行後每 30 分鐘運行一次。

反白 OnUnitActiveSec 變數的終端,該變數將單次運行計時器轉換為單調計時器。

建立瞬態定時器

Systemd Timer 深度整合到 Systemd 中的好處之一是它可以利用 init 守護程式的其他相鄰程式。例如,可以使用具有 Systemd-run 的計時器在電腦上建立一次性瞬態作業。

若要建立簡單的臨時計時器,請將以下程式碼行貼到終端機會話中,然後將變數的值替換--on-calendar為您希望命令運行的時間間隔:

將要執行的命令附加到該行末尾,然後按Enter安排它。

您也可以使用--on-boot--on-unit-active變數建立臨時單調計時器:

透過執行下列命令確認您的臨時計時器現在已在 Systemd 的作業排程器上排隊:

顯示系統中載入的瞬態計時器狀態的終端。

運行 Systemd 計時器

要執行新的 Systemd 計時器,您需要確保它已正確載入到目前的 Systemd 會話中。為此,請將自訂服務和計時器檔案複製到 Systemd 的服務目錄中:

重新載入 init 守護程式的目前配置:

啟動您使用以下命令建立的服務和計時器systemctl

sudo systemctl status my-new-timer.timer透過在新的終端機會話上執行:檢查是否已正確載入新計時器。在這種情況下,您可以看到我的計時器現在已排程並準備好系統運作。

顯示目前系統中執行的計時器檔案的終端。

學習如何使用 Systemd Timers 安排任務只是了解 Linux 機器底層工作原理的一部分。透過查看我們關於 Grub 和 Systemd-boot 的比較文章,深入了解這個精彩作業系統的內部結構。

圖片來源:Alexandr Podvalny,來自 Unsplash。所有修改和螢幕截圖均由 Ramces Red 進行。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *