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計時器也是支援的,那就需要把OnBootSec和OnUnitActiveSec去掉,換成OnCalendar,下面是一個例子:
OnCalendar=*-*-* *:*:00,10,20,30,40,50
最後補充一點,預設情況下,SystemD計時器和service的關聯是透過相同的名稱,如果你願意,也可以在[Timer]配置裡透過指定Unit欄位配對。
上面的幾種方法都可以實現低於分鐘粒度的定時調度任務。各有優點。 SystemD定時器看起來更正規,但稍微複雜了一點。 Crontab sleep方式雖然彆扭,但對於某些小任務來說沒有無法勝任的。
以上是讓Crontab每秒鐘執行一次任務的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

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

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

WebStorm Mac版
好用的JavaScript開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器