Systemd - Timer 服務的定時、排程執行

7 月 7, 2022

--

參考資源

--

流程

  1. 建立一個服務 .service
  2. 建立一個計時器 .timer ,執行剛剛建立的服務
  3. 啟用、開始服務及計時器

--

建立服務

範例服務的功能很簡單,就是將目前時間附加寫入 cron.log 內

/etc/systemd/system/test.service

啟用、開始服務

--

建立計時器

/etc/systemd/system/test.timer

  • 0/xx 除多少就代表幾秒跑一次
  • AccuracySec 計算間隔,最短為 1us

啟動、開始計時器

後續如果有修改,需要重新讀取

--

排程執行

  • * 星期幾
    Wed
    Mon,Sun
    Mon..Thu,Sat,Sun
  • *-*-* 西元年月日
    *-1-1
  • *:*:* 時分秒
    00:00:00

--

不能每秒執行

因為使用 Docker 的 PHP 來執行,一開始以為是容器執行效能問題,結果看了 Log 才發現是系統本身的問題。

每 2 秒執行一次是正常的

--

時間到了不執行!?

先檢查 timer 是否有在執行清單內

如果有的話可是沒有 NEXT 時間,那有可能是程序還在執行,使用 ps -ax 檢查一下

將執行中的程序刪除後重新等待執行應該就會正常了

--

Failed to parse calendar specification, ignoring:

使用 systemd-analyze calendar 測試時間格式,最後確認如果要每分鐘執行直接簡化成 *:*:00 即可

--

 1,590 total views,  1 views today

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。