欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux?systemd?定時任務(wù)原理解析

 更新時間:2024年04月16日 09:04:22   作者:咸魚Linux運維  
說到?Linux?定時任務(wù),大家用得最多的就是?crond?服務(wù),但其實?systemd?也有類似的功能,我們不但可以通過?systemd?來管理服務(wù),還能設(shè)置定時任務(wù),那就是?systemd?timer,接下來通過本文介紹Linux?systemd?定時任務(wù)的相關(guān)知識,需要的朋友可以參考下

哈嘍大家好,我是咸魚。

說到 Linux 定時任務(wù),大家用得最多的就是 crond 服務(wù),但其實 systemd 也有類似的功能。我們不但可以通過 systemd 來管理服務(wù),還能設(shè)置定時任務(wù),那就是 systemd timer。

與 crond 相比,systemd 定時任務(wù)具有以下優(yōu)點:

  • 更高的精度:systemd 定時任務(wù)可以精確到秒,而 crond 只能精確到分鐘。
  • 可以限制資源使用:使用 systemd 定時任務(wù)可以設(shè)置內(nèi)存和 CPU 的使用限制,比如最多使用 50% 的 CPU。
  • 更靈活的配置:systemd 定時任務(wù)可以通過條件、依賴關(guān)系等進行配置,以控制任務(wù)的執(zhí)行。相比之下,crond 的配置相對簡單,靈活性較低。

舉個例子,假設(shè)我們要通過 crond 配置多個大文件的遠程備份(使用 scp、rsync 或 ftp 的方式),但由于大文件的網(wǎng)絡(luò)傳輸時間不確定,因此下一個文件的備份任務(wù)開始時間幾乎都是按照經(jīng)驗估計的。

這可能導(dǎo)致上一個任務(wù)的網(wǎng)絡(luò)傳輸尚未完成,下一個任務(wù)已經(jīng)開始,同時占用網(wǎng)絡(luò)帶寬,然后又啟動了下一個任務(wù),形成惡性循環(huán)。

而使用 systemd timer 可以建立任務(wù)之間的依賴關(guān)系,例如在第一個備份任務(wù)完成后再啟動第二個備份任務(wù),以此類推。

systemd timer 原理

systemd 定時任務(wù)基于 systemd 的單元管理器。它使用兩種類型的單元來管理定時任務(wù):.timer 單元和 .service 單元。

  • .timer 單元:
    • .timer 單元定義了定時規(guī)則,包括啟動時間、間隔時間等。
    • 每個 .timer 單元都對應(yīng)一個或多個關(guān)聯(lián)的 .service 單元。
  • .service 單元:
    • .service 單元定義了要在計時器觸發(fā)時運行的服務(wù)或命令。
    • 當(dāng) .timer 觸發(fā)時,相關(guān)聯(lián)的 .service 單元將被啟動。

systemd 定時任務(wù)原理是:systemd 定期檢查每個 .timer 單元中定義的定時規(guī)則,以確定是否觸發(fā)相應(yīng)的定時器。一旦定時器觸發(fā),systemd 將啟動與該定時器關(guān)聯(lián)的 .service 單元,從而執(zhí)行預(yù)定的任務(wù)。

在正式介紹 systemd 定時任務(wù)之前,我們先要了解什么是單元(unit)。

systemd 單元

簡單來講,單元就是 systemd 的最小管理單位,是單個進程的描述。一個個單元相互調(diào)用和依賴,組成一個龐大的任務(wù)管理系統(tǒng)。

systemd 中的 unit 有很多類型,下面是一些常見的 unit 類型:

  • .service:service 單元,也就是我們常說的系統(tǒng)服務(wù)
  • .target:target 單元,其實就是一堆 unit 的集合,比如常見的 multi-user.target
  • .timer:timer 單元,負責(zé)定時任務(wù)。
  • .slice:slice 單元,負責(zé)資源的分配。

每個 unit 都有一個描述文件(unit 負責(zé)干什么、怎么干...),它們分散在三個目錄:

  • /lib/systemd/system:系統(tǒng)默認的 unit 文件
  • /etc/systemd/system:包含用戶自定義的 unit 文件,如果設(shè)置了開機自啟動,則該目錄下的 unit 描述文件會創(chuàng)建一個符號鏈接。
  • /usr/lib/systemd/system:用戶自己定義的 unit 文件,也會包含一些系統(tǒng)默認的 unit 文件

大多數(shù) linux 發(fā)行版中 /lib 是 /usr/lib的軟鏈接,所以 1 和 3 其實是同一目錄,作用自然應(yīng)該是相同的。

其實可以簡單分成兩類:

  • /etc/systemd/system:用戶自定義的 unit 文件
  • /usr/lib/systemd/system:系統(tǒng)默認的 unit 文件和用戶安裝軟件的 unit 文件
# 查看所有 unit
$ systemctl list-unit-files
# 查看所有 Service unit
$ systemctl list-unit-files --type service
# 查看所有 Timer unit
$ systemctl list-unit-files --type timer

關(guān)于 systemd unit 相關(guān)的內(nèi)容這里就不細講了,大家可以看我之前的文章:《利用systemctl管理Tomcat啟動、停止、重啟及開機啟動詳解

設(shè)置 systemd 定時任務(wù)

有一個檢查 https 證書是否過期的腳本 check_https.sh,我們現(xiàn)在需要系統(tǒng)定期執(zhí)行這個腳本,除此之外,系統(tǒng)在開機之后也會執(zhí)行這個腳本。

首先創(chuàng)建一個 service unit

[root@localhost ~]# cat /usr/lib/systemd/system/check-https.service
[Unit]
Description=check https certificates

[Service]
Type=oneshot
ExecStart=check_https.sh

[Install]
WantedBy=multi-user.target

Type=oneshot 表示 service 以一次性(Oneshot)方式運行。這意味著當(dāng)啟動 service 時,它將執(zhí)行一次,并在完成后退出。

然后我們創(chuàng)建一個 timer unit

Service unit 只是定義了如何執(zhí)行任務(wù),要定時執(zhí)行這個 Service,還必須定義 Timer unit

[root@localhost ~]# cat /usr/lib/systemd/system/check-https.timer
[Unit]
Description=Runs check https every day
[Timer]
OnUnitActiveSec=24h
Unit=check-https.service
[Install]
WantedBy=multi-user.target

我們著重來看下 [Timer] 部分:

  • OnActiveSec:定時任務(wù)生效后,多少時間開始執(zhí)行任務(wù)
  • OnBootSec:系統(tǒng)啟動后,多少時間開始執(zhí)行任務(wù)
  • OnStartupSec:Systemd 進程啟動后,多少時間開始執(zhí)行任務(wù)
  • OnUnitActiveSec:該 unit 上次執(zhí)行后,等多少時間再次執(zhí)行
  • OnUnitInactiveSec: 定時任務(wù)上次關(guān)閉后多少時間,再次執(zhí)行
  • OnCalendar:基于絕對時間,而不是相對時間執(zhí)行
  • AccuracySec:如果因為各種原因,任務(wù)必須推遲執(zhí)行,推遲的最大秒數(shù),默認是60秒
  • Unit:真正要執(zhí)行的任務(wù),默認是同名的帶有.service 后綴的 unit
  • Persistent:如果設(shè)置了該字段,即使定時任務(wù)到時沒有啟動,也會自動執(zhí)行相應(yīng)的 unit
  • WakeSystem:如果系統(tǒng)休眠,是否自動喚醒系統(tǒng)

上面的 timer 文件里,OnUnitActiveSec=24h 表示 24 小時執(zhí)行一次任務(wù)。

下面是其他的寫法:

1、在系統(tǒng)啟動 15 分鐘后執(zhí)行,并在系統(tǒng)運行時,每周執(zhí)行一次

[Timer]
OnBootSec=15min
OnUnitActiveSec=1w
Unit=check-https.service

2、每周周一執(zhí)行,如果到時定時任務(wù)沒有啟動,會立即執(zhí)行

[Timer]
OnCalendar=weekly
Persistent=true
Unit=check-https.service

3、每周日凌晨三點執(zhí)行(時間格式:Year-Month-Day Hour:Minute:Second

[Timer]
OnCalendar=Sun *-*-* 03:00:00
Unit=check-https.service

官方文檔:https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html

然后我們啟動這個定時任務(wù),并設(shè)置開機自啟動

# 重新加載配置
systemctl  daemon-reload
systemctl start check-https.timer
systemctl enable check-https.timer

其他一些定時任務(wù)命令:

# 查看所有正在運行的定時任務(wù)
systemctl list-timers
# 關(guān)閉定時任務(wù)
systemctl stop check-https.timer
# 查看定時任務(wù)狀態(tài)
systemctl status check-https.timer

到此這篇關(guān)于Linux systemd 定時任務(wù)的文章就介紹到這了,更多相關(guān)Linux systemd 定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell實現(xiàn)Fisher–Yates shuffle洗牌算法介紹

    shell實現(xiàn)Fisher–Yates shuffle洗牌算法介紹

    大家好,本篇文章主要講的是shell實現(xiàn)Fisher–Yates shuffle洗牌算法介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下哦
    2021-11-11
  • 在多個?Linux?服務(wù)器上運行多個命令的操作指南

    在多個?Linux?服務(wù)器上運行多個命令的操作指南

    如果你正在管理多臺?Linux?服務(wù)器,并且你想在所有?Linux?服務(wù)器上運行多個命令,但你不知道該怎么做,不用擔(dān)心,本文我們將向您展示如何在多個?Linux?服務(wù)器上同時運行多個命令,需要的朋友可以參考下
    2023-07-07
  • shell sed命令的具體使用

    shell sed命令的具體使用

    本文主要介紹了shell sed命令的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • shell腳本命令行參數(shù)簡介

    shell腳本命令行參數(shù)簡介

    本文詳細介紹了shell腳本命令行參數(shù)的用法,在shell腳本中要注意命令行參數(shù)怎么使用,這也是shell編程中的重點內(nèi)容,有需要的朋友參考下。
    2014-04-04
  • 詳解Linux定時任務(wù)Crontab的介紹與使用

    詳解Linux定時任務(wù)Crontab的介紹與使用

    linux內(nèi)置的cron進程能幫我們實現(xiàn)這些需求,cron搭配shell腳本,非常復(fù)雜的指令也沒有問題。本文主要介紹了定時任務(wù)Crontab的使用,需要的可以學(xué)習(xí)一下
    2022-10-10
  • linux下socket編程常用頭文件(推薦)

    linux下socket編程常用頭文件(推薦)

    這篇文章主要介紹了linux下socket編程常用頭文件,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • crontab執(zhí)行失敗的原因及一些解決辦法

    crontab執(zhí)行失敗的原因及一些解決辦法

    crontab 是Linux和Unix-like系統(tǒng)中用于設(shè)置周期性被執(zhí)行的任務(wù)的工具,cron 是一個守護進程,可以定期檢查 crontab 文件,并執(zhí)行其中定義的命令,本文給大家介紹了crontab執(zhí)行失敗的原因及一些解決辦法,需要的朋友可以參考下
    2024-04-04
  • Linux下shell腳本監(jiān)控Tomcat的狀態(tài)并實現(xiàn)自動啟動的步驟

    Linux下shell腳本監(jiān)控Tomcat的狀態(tài)并實現(xiàn)自動啟動的步驟

    這篇文章主要介紹了Linux下shell腳本監(jiān)控Tomcat的狀態(tài)并實現(xiàn)自動啟動的步驟,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-12
  • Linux中刪除文件內(nèi)空行的4種方法

    Linux中刪除文件內(nèi)空行的4種方法

    這篇文章主要介紹了Linux中刪除文件內(nèi)空行的4種方法,需要的朋友可以參考下
    2014-06-06
  • linux系統(tǒng)安裝字體詳細介紹

    linux系統(tǒng)安裝字體詳細介紹

    這篇文章主要介紹了linux系統(tǒng)安裝字體詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論