中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-01-19 17:24:46 來源:億速云 閱讀:425 作者:kk 欄目:系統運維

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

下面介紹用于調度任務的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”來指定時間表。“OnCalendar”選項更加靈活。例如:
# 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定時器的基礎是什么”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和林格尔县| 阜宁县| 彭阳县| 仪陇县| 兴国县| 安远县| 安义县| 溧水县| 拜泉县| 宕昌县| 安新县| 桑日县| 当阳市| 德令哈市| 大关县| 海丰县| 内丘县| 宁化县| 陇西县| 岳普湖县| 通城县| 余庆县| 酒泉市| 九江县| 蒙阴县| 加查县| 名山县| 漠河县| 赞皇县| 柘荣县| 闻喜县| 晋州市| 佛教| 弥渡县| 新余市| 瓦房店市| 永年县| 沐川县| 贵南县| 邳州市| 宜宾市|