如何使 systemd-timer 依賴於網際網路連接?
我
systemd-timer
用來定期執行一個使用 Web 服務的腳本。問題是,在系統恢復或喚醒時,網際網路連接不會立即啟動,但計時器會被觸發,因此腳本會返回錯誤(如果服務等待幾秒鐘,腳本將正確執行並且會有無需將任務推遲到下一次執行。)
1-我怎樣才能讓計時器(或與之關聯的服務)等到網路連接可用?
2-當系統不線上時,如何使計時器(或服務)不呼叫腳本?
添加
After=network-online.target
到[Unit]
計時器的部分。解釋:
計時器確實接受該
[Unit]
部分中以服務聞名的所有相關排序命令。事實上,定時器和服務的[Unit]
和[Install]
部分是相同的。形成官方手冊:名稱以“.timer”結尾的單元配置文件編碼有關由 systemd 控制和監督的計時器的資訊,用於基於計時器的啟動。
此手冊頁列出了特定於該單元類型的配置選項。有關所有單元配置文件的常用選項,請參見systemd.unit(5)。常用的配置項在generic中配置
$$ Unit $$和$$ Install $$部分。定時器特定的配置選項在$$ Timer $$部分。
也就是說,您需要了解定義網路是否啟動的network-online.target。
network-online.target 是一個主動等待直到網路“up”的目標,其中“up”的定義由網管軟體定義。通常它表示某種已配置的、可路由的 IP 地址。其主要目的是主動延遲服務的啟動,直到網路建立。
限制
network-online.target
不是檢查網際網路,而是檢查網路連接。當然,區域網路本身可能無法訪問網際網路。如果您不能依賴路由器或您的 ISP 來提供連接,您將不得不製作一個特殊test-internet.service
的 ping 某些網站並且僅在成功一次後才被定義為活動的(否則每 15 秒左右在失敗時重新啟動)。那應該是一種Type=oneshot
服務RemainAfterExit=yes
。但我認為這不是你要求的。