久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

在Linux系統下使用Systemd定時器的基礎是什么

193次閱讀
沒有評論

共計 4245 個字符,預計需要花費 11 分鐘才能閱讀完成。

這篇文章的內容主要圍繞在 Linux 系統下使用 Systemd 定時器的基礎是什么進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨丸趣 TV 小編一起閱讀吧。希望大家通過這篇文章有所收獲!

下面介紹用于調度任務的 Systemd 定時器(Systemd Timer),也是一篇在 Linux 系統下使用 Systemd 定時器的基礎文章。將展示如何在 Systemd 中使用定時器在系統啟動后并在此后重復運行任務。當前 Systemd 已經提供了一段時間的定時器,作為 cron 的替代品,該功能值得一看。

Cron vs anacron vs systemd

Cron 可以安排任務以從幾分鐘到幾個月或更長時間的運行。設置相對簡單,只需要一個配置文件。雖然配置行有點深奧,不過一般用戶也可以使用。

但是,如果您的系統在適當的執行時間發生時沒有運行,則 Cron 會失敗。

Anacron,克服了“系統未運行”的問題。它確保當您的系統再次處于活動狀態時將執行任務。雖然它旨在供管理員使用,但某些系統為一般用戶提供訪問權限。

但是,執行的 anacron 頻率可以不少于每天。

cron 和 anacron 都存在執行上下文的一致性問題。必須注意任務運行時有效的環境與測試時使用的環境完全相同。必須提供相同的 shell、環境變量和路徑。這意味著測試和調試有時會很困難。

Systemd 定時器提供了 cron 和 anacron 的最佳功能。允許調度到分鐘粒度。確保任務將在系統再次運行時執行,即使它在預期的執行時間內關閉。可供所有用戶使用。您可以在它將運行的環境中測試和調試執行。

但是配置比較復雜,至少需要兩個配置文件。

如果您的 cron 和 anacron 配置很好地為您服務,那么可能沒有理由改變。但 systemd 至少值得研究,因為它可以簡化任何當前的 cron /anacron 解決方法。

參考:在 Linux 系統下使用 Crontab UI 安全管理 Cron 定時任務。

配置

Systemd 定時器執行的函數至少需要兩個文件。它們是“timer unit”和“service unit”。操作不僅僅是一個簡單的命令,您還需要一個“job”文件或腳本來執行必要的功能。

定時器單元文件定義調度,而服務單元文件定義執行的任務。有關.timer 單元的更多詳細信息,請參閱“man systemd.timer”。有關服務單元的詳細信息,請參見“man systemd.service”。

單元文件存在于多個位置(在手冊頁中列出)。然而,對于一般用戶來說,最簡單的位置可能是“~/.config/systemd/user”。請注意,此處的“user”是文字字符串“user”。

示例

這個示例是一個簡單的例子,創建一個用戶計劃作業而不是系統計劃作業(它將以 root 身份運行)。它將消息、日期和時間打印到文件中。

1、首先創建一個將執行任務的 shell 腳本。在本地“bin”目錄中創建它,例如,在“~/bin/schedule-test.sh”。

要創建文件:

touch  ~/bin/schedule-test.sh

然后將以下內容添加到您剛剛創建的文件中:

#!/bin/sh

echo This is only a test: $(date) $HOME/schedule-test-output.txt

請記住使您的 shell 腳本可執行。

2、創建將調用上述腳本的.service 單元。在“~/.config/systemd/user/schedule-test.service”位置創建目錄和文件:

[Unit]
Description=A job to test the systemd scheduler
[Service]
Type=simple
ExecStart=/home/ user /bin/schedule-test.sh
[Install]
WantedBy=default.target

請注意,user 應該是您的 @HOME 地址,但單元文件路徑名中的“user”實際上是字符串“user”。

ExecStart 行應該提供一個沒有變量的絕對地址。一個例外是,對于用戶單位,您可以將“%h”替換為 $HOME。換句話說,您可以使用:

ExecStart=%h/bin/schedule-test.sh

這僅用于用戶單元文件使用。這對系統單元不利,因為“%h”在系統環境中運行時將始終返回“/root”。其他替換在“man systemd.unit”中的“SPECIFIERS”標題下找到。由于它超出了本文的范圍,這就是我們現在需要了解的有關 SPECIFIERS 的全部內容。

3、創建一個.timer 單元文件,它實際調度您剛剛創建的.service 單元。在與.service 文件“~/.config/systemd/user/schedule-test.timer”相同的位置創建它。請注意,文件名僅在擴展名上有所不同,即“.service”與“.timer”:

[Unit]
Description=Schedule a message every 1 minute
RefuseManualStart=no # Allow manual starts
RefuseManualStop=no # Allow manual stops
[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Run 120 seconds after boot for the first time
OnBootSec=120
#Run every 1 minute thereafter
OnUnitActiveSec=60
#File describing job to execute
Unit=schedule-test.service
[Install]
WantedBy=timers.target
請注意,.timer 文件已使用“OnUnitActiveSec”來指定時間表?!癘nCalendar”選項更加靈活。例如:# run on the minute of every minute every hour of every day
OnCalendar=*-*-* *:*:00
# run on the hour of every hour of every day
OnCalendar=*-*-* *:00:00
# run every day
OnCalendar=*-*-* 00:00:00
# run 11:12:13 of the first or fifth day of any month of the year
# 2012, but only if that day is a Thursday or Friday
OnCalendar=Thu,Fri 2021-*-1,5 11:12:13

4、所有部分都已就位,但您應該進行測試以確保一切正常。首先,啟用用戶服務:

$ systemctl –user enable schedule-test.service

這應該會產生類似于以下內容的輸出:

Created symlink /home/ user /.config/systemd/user/default.target.wants/schedule-test.service rarr; /home/ user /.config/systemd/user/schedule-test.service.

現在對作業進行測試運行:

$ systemctl –user start schedule-test.service

檢查您的輸出文件 ($HOME/schedule-test-output.txt) 以確保您的腳本是正確執行。因為我們還沒有啟動定時器,所以應該有一個條目。根據需要進行調試。如果您需要更改.service 文件而不是它調用的 shell 腳本,請不要忘記再次啟用該服務。

5、作業正常工作后,通過為您的服務啟用和啟動用戶定時器來實時安排它:

$ systemctl –user enable schedule-test.timer

$ systemctl –user start schedule-test.timer

請注意,您已經在上面的步驟 4 中啟動并啟用了該服務,因此只需為其啟用和啟動定時器即可。

“enable”命令將導致類似以下的輸出:

Created symlink /home/ user /.config/systemd/user/timers.target.wants/schedule-test.timer rarr; /home/ user /.config/systemd/user/schedule-test.timer.

并且“start”只會讓您返回到 CLI 提示符。

其他操作

您可以檢查和監控服務。如果您收到來自服務單元的錯誤,下面的第一個命令特別有用:

$ systemctl –user status schedule-test

$ systemctl –user list-unit-files

手動停止服務:

$ systemctl –user stop schedule-test.service

永久停止和禁用定時器和服務,重新加載守護程序配置并重置任何失敗通知:

$ systemctl --user stop schedule-test.timer
$ systemctl --user disable schedule-test.timer
$ systemctl --user stop schedule-test.service
$ systemctl --user disable schedule-test.service
$ systemctl --user daemon-reload
$ systemctl --user reset-failed

什么是 Linux 系統

Linux 是一種免費使用和自由傳播的類 UNIX 操作系統,是一個基于 POSIX 的多用戶、多任務、支持多線程和多 CPU 的操作系統,使用 Linux 能運行主要的 Unix 工具軟件、應用程序和網絡協議。

感謝你的閱讀,相信你對“在 Linux 系統下使用 Systemd 定時器的基礎是什么”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注丸趣 TV 網站!丸趣 TV 小編會繼續為大家帶來更好的文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計4245字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 嘉黎县| 潮州市| 广宗县| 新化县| 高台县| 梅河口市| 龙岩市| 固始县| 黔江区| 嵊州市| 安西县| 黄浦区| 景洪市| 星子县| 岳普湖县| 建阳市| 江津市| 甘孜县| 内丘县| 关岭| 龙游县| 辽源市| 仙桃市| 田东县| 大城县| 海盐县| 建德市| 太康县| 博兴县| 武胜县| 宜良县| 雷波县| 雷州市| 龙川县| 固镇县| 阳原县| 德令哈市| 封开县| 台南县| 张家界市| 西乌珠穆沁旗|