最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

哈嘍大家好,我是咸魚(yú)。

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

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

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

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

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

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

systemd timer 原理

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

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

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

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

systemd 單元

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

systemd 中的 unit 有很多類(lèi)型,下面是一些常見(jiàn)的 unit 類(lèi)型:

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

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

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

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

其實(shí)可以簡(jiǎn)單分成兩類(lèi):

  • /etc/systemd/system:用戶(hù)自定義的 unit 文件
  • /usr/lib/systemd/system:系統(tǒng)默認(rèn)的 unit 文件和用戶(hù)安裝軟件的 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)容這里就不細(xì)講了,大家可以看我之前的文章:《利用systemctl管理Tomcat啟動(dòng)、停止、重啟及開(kāi)機(jī)啟動(dòng)詳解

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

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

首先創(chuàng)建一個(gè) 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)方式運(yùn)行。這意味著當(dāng)啟動(dòng) service 時(shí),它將執(zhí)行一次,并在完成后退出。

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

Service unit 只是定義了如何執(zhí)行任務(wù),要定時(shí)執(zhí)行這個(gè) 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

我們著重來(lái)看下 [Timer] 部分:

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

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

下面是其他的寫(xiě)法:

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

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

2、每周周一執(zhí)行,如果到時(shí)定時(shí)任務(wù)沒(méi)有啟動(dòng),會(huì)立即執(zhí)行

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

3、每周日凌晨三點(diǎn)執(zhí)行(時(shí)間格式: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

然后我們啟動(dòng)這個(gè)定時(shí)任務(wù),并設(shè)置開(kāi)機(jī)自啟動(dòng)

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

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

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

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

相關(guān)文章

  • 使用Shell腳本批量執(zhí)行SQL腳本

    使用Shell腳本批量執(zhí)行SQL腳本

    這篇文章主要為大家介紹了批量執(zhí)行SQL腳本的Shell腳本的相關(guān)知識(shí)以及注意事項(xiàng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-01-01
  • 一文教會(huì)你如何使用grep跨多行查找模式匹配

    一文教會(huì)你如何使用grep跨多行查找模式匹配

    grep匹配是linux的最常用的shell命令之一,這篇文章主要給大家介紹了關(guān)于如何使用grep跨多行查找模式匹配的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 一個(gè)可交互的并發(fā)ping檢測(cè)腳本

    一個(gè)可交互的并發(fā)ping檢測(cè)腳本

    可交互的并發(fā)ping檢測(cè)腳本,供大家學(xué)習(xí)參考。重點(diǎn)& 跟wait,這樣“并發(fā)”的結(jié)果是輸出結(jié)果不是能按順序,后臺(tái)返回。如果需要再排序下
    2013-02-02
  • Linux文件處理常用命令操作技巧

    Linux文件處理常用命令操作技巧

    我是Linux初學(xué)者,在這里小編給大家分享linux幾個(gè)常用文件處理命令,感興趣的朋友參考下吧
    2017-08-08
  • 利用linux的timerfd_create實(shí)現(xiàn)計(jì)時(shí)器示例分享

    利用linux的timerfd_create實(shí)現(xiàn)計(jì)時(shí)器示例分享

    這篇文章主要介紹了利用linux的timerfd_create實(shí)現(xiàn)計(jì)時(shí)器示例,需要的朋友可以參考下
    2014-02-02
  • exit(-1)或者return(-1)shell得到的退出碼為什么是255

    exit(-1)或者return(-1)shell得到的退出碼為什么是255

    exit(-1)或者return(-1)shell得到的退出碼為是255,大家知道為什么嗎?帶著這個(gè)疑問(wèn)來(lái)腳本之家學(xué)習(xí)下吧,本篇文章告訴大家答案
    2015-10-10
  • shell腳本環(huán)境變量.bashrc配置實(shí)踐

    shell腳本環(huán)境變量.bashrc配置實(shí)踐

    本文介紹了Linux中的環(huán)境變量配置方法,包括/etc/profile和~/.bashrc,作者強(qiáng)調(diào)了bash腳本環(huán)境變量的重要性,并提出了三種解決方法:在腳本中加入環(huán)境變量、配置~/.bashrc和將/etc/profile加入~/.bashrc
    2026-02-02
  • Linux 打包壓縮命令詳解

    Linux 打包壓縮命令詳解

    在Linux系統(tǒng)中,有多種命令可以用于打包和壓縮文件,這些命令可以幫助用戶(hù)將多個(gè)文件或目錄打包成一個(gè)文件,并可以選擇不同的壓縮算法來(lái)減小文件大小,下面給大家介紹Linux 打包壓縮命令詳解,感興趣的朋友一起看看吧
    2023-09-09
  • Shell expr命令進(jìn)行整數(shù)計(jì)算的實(shí)現(xiàn)

    Shell expr命令進(jìn)行整數(shù)計(jì)算的實(shí)現(xiàn)

    這篇文章主要介紹了Shell expr命令進(jìn)行整數(shù)計(jì)算的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • linux shell內(nèi)置判斷語(yǔ)句

    linux shell內(nèi)置判斷語(yǔ)句

    內(nèi)置判斷,成功的時(shí)候返回0,不成功返回非零。接下來(lái)通過(guò)本文重點(diǎn)給大家介紹linux shell內(nèi)置判斷語(yǔ)句,感興趣的的朋友一起看看吧
    2017-08-08

最新評(píng)論

长葛市| 宝清县| 九江县| 沙坪坝区| 渑池县| 天镇县| 唐海县| 秭归县| 黑龙江省| 金寨县| 特克斯县| 咸丰县| 育儿| 罗山县| 富平县| 浦北县| 昭平县| 张家川| 习水县| 霸州市| 伊宁市| 石柱| 游戏| 黑龙江省| 丹巴县| 理塘县| 泽库县| 沙坪坝区| 贺兰县| 噶尔县| 高台县| 青浦区| 萝北县| 高清| 韶关市| 上虞市| 嘉禾县| 三台县| 石屏县| 阳信县| 达州市|