搜尋
首頁運維linux運維讓Crontab每秒鐘執行一次任務的方法

讓Crontab每秒鐘執行一次任務的方法

讓Crontab每秒鐘執行一次任務的方法

Crontab是linux下定時調度配置文件,透過它,我們可以讓系統的程式、腳本、命令、任務按設定的時間、間隔、週期循環的運作。在Crontab裡時間粒度最小的是分鐘。也就是說,透過Crontab配置,我們最多可以讓目標任務每分鐘執行一次,更頻繁的執行是不行的,只能藉助其它方法。

相關學習推薦:linux影片教學

#比如說,如果希望一個程式每30秒執行一次,該怎麼辦呢?

變通的方法還是有的。一個想法是,在Crontab裡加入兩個配置,一個是正常調度,每分鐘執行一次,另一個是等待30秒後才執行。

# Need these to run on 30-sec boundaries, keep commands in sync.
* * * * *              /path/to/executable param1 param2
* * * * * ( sleep 30 ; /path/to/executable param1 param2 )

這種方法感覺有點生硬,怪怪的,但的確可行。這個方法實際上是可以簡寫成一行:

* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"

還有一個方法是使用watch命令:

$ watch --interval .30 script_to_run_every_30_sec.sh

但watch是命令列工具,我們可以使用nohup指令讓它在背景運行。

SystemD計時器

如果我們使用的linux系統裡有SystemD,可以使用SystemD計時器在任何時間粒度上調度程序,理論上可以小到奈秒等級——當然,這樣做有點瘋狂。總之,它在任務調度上的靈活性遠比Cron要高——無需使用sleep這種蹩腳的方案。

比起一行完成設定的crontab來說,建立一個SystemD計時器會顯得稍微複雜一些,但為了更好的實作小於『每分鐘』粒度的調度任務,這個方法值得嘗試。

SystemD定時器實作原理簡單說就是兩個部分:一個系統service,一個SystemD定時器。 SystemD定時器執行調度,而任務是寫在service裡。

下面有個簡單的例子,目標是讓系統logger每十秒鐘輸出一次「Hello World」;

/etc/systemd/system/helloworld.service

[Unit]
Description=Say Hello
[Service]
ExecStart=/usr/bin/logger -i Hello World

/etc/systemd/system/helloworld.timer

[Unit]
Description=Say Hello every 10 seconds
[Timer]
OnBootSec=10
OnUnitActiveSec=10
AccuracySec=1ms
[Install]
WantedBy=timers.targethelloworld.timer里并没有声明service的名称,那它和service是如何关联的呢?没错,因为它们的名称相同,都是helloworld。

如果想讓整個系統使用這個定時器,這兩個檔案就需要放置在/etc/systemd/system下。如果想要給某個使用者使用,則放置在~/.config/systemd/user。想讓這個定時器立即運行,需要執行下面的命令:

systemctl enable --now helloworld.timer

裡面的–now標記是讓定時器立即執行。否則,只有等系統重新啟動後,或是使用者登入才會觸發運作。

[Timer]部分裡的各個字段的作用如下:

  • #OnBootSec – 系統啟動多少秒後開始執行調度
  • OnUnitActiveSec – 重複調度相關service的時間間隔。就是這行配置決定了跟cron job一樣定時調度的動作。
  • AccuracySec – 定時器精確度。預設是一分鐘,跟cron很相似。可以要求的更高,但精度增加會帶來更多系統的消耗,更頻繁的喚醒CPU。上面的配置裡寫的是1ms,顯然不是聰明的決定。通常我們可以把它設定為 1(1秒),對於我們這樣低於1分鐘時間粒度的定時器的精度要求已經夠用了。也是因為如此,我們會看到,實際程式運行時輸出「Hello World」訊息的時間常常會延遲1秒左右。如果你認為這一秒鐘左右的延遲不是問題,那就應該這樣設定。

你會發現,SystemD計時器和Crontab計時器並不是一樣的-任務調度的週期並不是按年月日小時分鐘週期設定的,它是按我們第一次執行它的時間開始,每次追加一個週期的時間。如果我們鍾情於Crontab那樣的時間配置方式,SystemD計時器也是支援的,那就需要把OnBootSecOnUnitActiveSec去掉,換成OnCalendar,下面是一個例子:

OnCalendar=*-*-* *:*:00,10,20,30,40,50

最後補充一點,預設情況下,SystemD計時器和service的關聯是透過相同的名稱,如果你願意,也可以在[Timer]配置裡透過指定Unit欄位配對。

上面的幾種方法都可以實現低於分鐘粒度的定時調度任務。各有優點。 SystemD定時器看起來更正規,但稍微複雜了一點。 Crontab sleep方式雖然彆扭,但對於某些小任務來說沒有無法勝任的。

 

以上是讓Crontab每秒鐘執行一次任務的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
了解Linux:定義的核心組件了解Linux:定義的核心組件May 01, 2025 am 12:19 AM

Linux的核心組件包括內核、shell、文件系統、進程管理和內存管理。 1)內核管理系統資源,2)shell提供用戶交互界面,3)文件系統支持多種格式,4)進程管理通過fork等系統調用實現,5)內存管理使用虛擬內存技術。

Linux的構建塊:關鍵組件解釋了Linux的構建塊:關鍵組件解釋了Apr 30, 2025 am 12:26 AM

Linux系統的核心組成部分包括內核、文件系統和用戶空間。 1.內核管理硬件資源並提供基本服務。 2.文件系統負責數據存儲和組織。 3.用戶空間運行用戶程序和服務。

使用維護模式:故障排除和修復Linux使用維護模式:故障排除和修復LinuxApr 29, 2025 am 12:28 AM

維護模式是Linux系統中通過單用戶模式或救援模式進入的特殊運行級別,用於系統維護和修復。 1.進入維護模式使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式中,可以檢查並修復文件系統,使用命令“fsck/dev/sda1”。 3.高級用法包括重置root用戶密碼,需掛載文件系統為讀寫模式並編輯密碼文件。

Linux維護模式:了解目的Linux維護模式:了解目的Apr 28, 2025 am 12:01 AM

維護模式用於系統維護和修復,允許管理員在簡化環境中工作。 1.系統修復:修復損壞的文件系統和啟動加載器。 2.密碼重置:重置root用戶密碼。 3.軟件包管理:安裝、更新或刪除軟件包。通過修改GRUB配置或使用特定鍵進入維護模式,執行維護任務後可安全退出。

Linux操作:網絡和網絡配置Linux操作:網絡和網絡配置Apr 27, 2025 am 12:09 AM

Linux網絡配置可以通過以下步驟完成:1.配置網絡接口,使用ip命令臨時設置或編輯配置文件持久化設置。 2.設置靜態IP,適合需要固定IP的設備。 3.管理防火牆,使用iptables或firewalld工具來控製網絡流量。

Linux中的維護模式:系統管理員指南Linux中的維護模式:系統管理員指南Apr 26, 2025 am 12:20 AM

維護模式在Linux系統管理中扮演關鍵角色,幫助進行系統修復、升級和配置變更。 1.進入維護模式可以通過GRUB菜單選擇或使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式下,可以執行文件系統修復和系統更新等操作。 3.高級用法包括重置root密碼等任務。 4.常見錯誤如無法進入維護模式或掛載文件系統,可通過檢查GRUB配置和使用fsck命令修復。

Linux中的維護模式:何時以及為什麼使用它Linux中的維護模式:何時以及為什麼使用它Apr 25, 2025 am 12:15 AM

使用Linux維護模式的時機和原因:1)系統啟動問題時,2)進行重大系統更新或升級時,3)執行文件系統維護時。維護模式提供安全、控制的環境,確保操作的安全性和效率,減少對用戶的影響,並增強系統的安全性。

Linux:基本命令和操作Linux:基本命令和操作Apr 24, 2025 am 12:20 AM

Linux中不可或缺的命令包括:1.ls:列出目錄內容;2.cd:改變工作目錄;3.mkdir:創建新目錄;4.rm:刪除文件或目錄;5.cp:複製文件或目錄;6.mv:移動或重命名文件或目錄。這些命令通過與內核交互執行操作,幫助用戶高效管理文件和系統。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器