システムタイマーはどのように機能しますか?

システムタイマーはどのように機能しますか?

すでに持っており、myscript.serviceこのサービスを毎時間開始したいと思います。だから私が書いたmyscript.timer

Description=My script timer

[Timer]
OnCalendar=hourly
;OnCalendar=*-*-* 0/2:00:00

[Install]
WantedBy=timers.target

私は始まり、systemctl enable --now myscript.timer次にsystemctl status myscript.timer 得た。

[user@localhost ~]$ sudo systemctl status myscript.timer
● myscript.timer - My script timer
     Loaded: loaded (/etc/systemd/system/myscript.timer; enabled; vendor preset: disabled)
     Active: active (waiting) since Tue 2020-09-01 12:10:54 +05; 4s ago
    Trigger: Tue 2020-09-01 16:31:29 +05; 4h 20min left
   Triggers: ● myscript.service

Sep 01 12:10:54 localhost.localdomain systemd[1]: Started My script timer.

なぜ1時間後にトリガされないのかわかりませんか?

ベストアンサー1

残念ながら、現在発生している問題を再現することはできません。コメントで判断すると、;OnCalendar=フィールドを変更し続けています。systemctl daemon-reloadタイマーを編集して起動する間にこの機能を使用しましたか?

私のシステムでテストすると、次のように表示されます。

$ systemctl --user cat mytime.timer
# /home/stew/.config/systemd/user/mytime.timer
[Unit]
Description=Test timer

[Timer]
OnCalendar=hourly


$ systemctl --user start mytime.timer
$ systemctl --user status mytime.timer
● mytime.timer - Test timer
     Loaded: loaded (/home/stew/.config/systemd/user/mytime.timer; static)
     Active: active (waiting) since Tue 2020-09-01 09:49:14 CEST; 7s ago
    Trigger: Tue 2020-09-01 10:00:00 CEST; 10min left
   Triggers: ● mytime.service

Sep 01 09:49:14 stewbian systemd[1691]: Started Test timer.

その後、最初のタイマーが期限切れになるまで10分待ってから、次のようになりました。


$ journalctl --user -u mytime.timer -u mytime.service
-- Logs begin at Mon 2020-07-06 04:41:08 CEST, end at Tue 2020-09-01 10:00:00 CEST. --
Sep 01 09:49:14 stewbian systemd[1691]: Started Test timer.
Sep 01 10:00:00 stewbian systemd[1691]: Starting mytime.service...
Sep 01 10:00:00 stewbian systemd[1691]: mytime.service: Succeeded.
Sep 01 10:00:00 stewbian systemd[1691]: Finished mytime.service.


$ systemctl --user status mytime.timer
● mytime.timer - Test timer
     Loaded: loaded (/home/stew/.config/systemd/user/mytime.timer; static)
     Active: active (waiting) since Tue 2020-09-01 09:49:14 CEST; 10min ago
    Trigger: Tue 2020-09-01 11:00:00 CEST; 59min left
   Triggers: ● mytime.service

Sep 01 09:49:14 stewbian systemd[1691]: Started Test timer.

この例ではを使用しましたOnCalendar=hourly。最初のトリガポイントは次の時間の始まりです。 2番目のトリガーは次の時間の始まりに設定されます。


問題が疑われるので、daemon-reloadこれを変更して問題を再現してみましたOnCalendar=。私が見つけたもの:

  1. 使用するとsystemctl daemon-reload変更が適用されました。
  2. これにより、systemctl stopそうでないsystemctl start場合でも変更が適用されますdaemon-reload
  3. systemctl start前のタイマーを停止しない場合は、次に変更します。いいえこれについて申請して警告を受けます。
$ systemctl --user start mytime.timer
Warning: The unit file, source configuration file or drop-ins of mytime.timer
  changed on disk. Run 'systemctl --user daemon-reload' to reload units.

おすすめ記事