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