systemd タイマーの予期しない動作

systemd タイマーの予期しない動作

私が尋ねている質問は、systemdタイマーとその動作に関するものです。systemdタイマーの操作方法の例を見つけました。ここ

私が提供したリンクは fedora 向けのサイトへのリンクですが、この特定のトピックは red-hat ベースのディストリビューションに限定されません。私は lubuntu 20.04 で同じことを試してみましたが、動作するものの、期待通りには動作しませんでした。基本的に、指定されたファイルにテキスト (現在の時刻を含む) を出力するスクリプトを作成し、次に、私が提供したリンクの例と同じ方法で.service対応するファイルを作成しました。問題は、次の行にあります。.timerschedule-test.timer

[Unit]
Description=Schedule a message every 1 minute
RefuseManualStart=no
RefuseManualStop=no

[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Run 120 seconds after boot for the first time
OnBootSec=120
#Run every 1 minute thereafter
OnUnitActiveSec=60
#File describing job to execute
Unit=schedule-test.service

[Install]
WantedBy=timers.target

つまり、基本的に、このタイマーは起動後 120 秒で実行され、その後は実行中に 60 秒ごとに実行されることが予想されますschedule-test.service。ただし、その逆のことが起こります。以下は、スクリプトが出力を書き込むファイルの一部です。

This is only a test: Sat 30 Jul 2022 08:43:41 AM 
This is only a test: Sat 30 Jul 2022 08:45:41 AM 
This is only a test: Sat 30 Jul 2022 08:47:41 AM 
This is only a test: Sat 30 Jul 2022 08:49:41 AM
This is only a test: Sat 30 Jul 2022 08:51:41 AM

ご覧のとおり、システムが実行中の場合、スクリプトは 120 秒ごとに実行されます OnUnitActiveSec=60。ここで何が間違っているのでしょうか。私の推論が間違っているのでしょうか。それとも、何らかの理由でこれが期待どおりに動作しないのでしょうか。

答え1

systemdタイマーはデフォルトでは秒単位の精度ではありません... タイマーは1分間隔で動作します(あなたの場合)OnBootSec=またはOnUnitActiveSec=その他(OnCalendar=, OnActiveSec=, OnStartupSec= and OnUnitInactiveSec=) ... これはデフォルトの省電力機能ですが、精度を1秒まで下げることができます(最小かつ最も正確なのは1である。マイクロ秒つまりAccuracySec=1 us) 設定することによりAccuracySec=1次のように、タイマー ユニットに追加のエントリとして追加します。

[Unit]
Description=Schedule a message every 1 minute
RefuseManualStart=no
RefuseManualStop=no

[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Set the timer accuracy to 1 second instead of the default 1 minute
AccuracySec=1
#Run 120 seconds after boot for the first time
OnBootSec=120
#Run every 1 minute thereafter
OnUnitActiveSec=60
#File describing job to execute
Unit=schedule-test.service

[Install]
WantedBy=timers.target

関連情報