Bug#997943: systemd: Persistent attribute of timer is ignored
Michael Biebl
biebl at debian.org
Wed Oct 27 20:19:09 BST 2021
On 27.10.21 21:05, Michael Biebl wrote:
> On 27.10.21 20:47, Michael Biebl wrote:
>
>> Important is this sentence:
>> "Such triggering is nonetheless subject to the delay imposed by
>> RandomizedDelaySec="
>>
>> Keep in mind that RandomizedDelaySec= is not stored on disk, only the
>> timestamp of the last execution.
>>
>> So, let's assume the service was last triggered 2 days ago and you
>> shut down the system yesterday. You boot the system this morning at
>> 9:00, so the timer has elapsed. But a RandomizedDelaySec= is applied,
>> which is computed dynamically. Let's say the delay is 7 hours. If you
>> shut down the system before that, your service won't be executed.
>> The next day when you start your system again, systemd will notice
>> again, that the timer has elapsed and again will apply a
>> RandomizedDelaySec=12h, in this case maybe 9 hours.
>> If you only ever use your system for a very short period of time, this
>> would mean that you never actually see the service being executed.
>> A RandomizedDelaySec=12h is rather large, if you run your system for
>> only 6 hours a day, you have a chance of hitting the timer by 50% I'd
>> say.
>
> This would be consistent with your observation that by reducing
> RandomizedDelaySec= to 0h you are reliably triggering the timer.
>
> So, what you see is actually consistent with the documented behaviour
> I'd argue. Nonetheless, if I understand you correctly there is a
> difference of behaviour between buster and bullseye if I understand you
> correctly.
>
> I went through the changelog/NEWS file of systemd. This seems to be
> related:
>
> v247:
>> * Timer units gained a new FixedRandomDelay= boolean setting. If
>> enabled, the random delay configured with
>> RandomizedDelaySec= is
>> selected in a way that is stable on a given system (though
>> still
>> different for different units).
>
>
> and from the man page
>
>> RandomizedDelaySec=
>> Delay the timer by a randomly selected, evenly distributed
>> amount of time between 0 and the specified time value.
>> Defaults to 0, indicating that no randomized delay shall be
>> applied. Each timer unit will determine this delay
>> randomly before each iteration, and the delay will simply
>> be added on top of the next determined elapsing time, unless
>> modified with FixedRandomDelay=, see below.
>>
>> This setting is useful to stretch dispatching of similarly
>> configured timer events over a certain time interval, to
>> prevent them from firing all at the same time, possibly
>> resulting in resource congestion.
>>
>> Note the relation to AccuracySec= above: the latter allows
>> the service manager to coalesce timer events within a
>> specified time range in order to minimize wakeups, while
>> this setting does the opposite: it stretches timer events
>> over an interval, to make it unlikely that they fire
>> simultaneously. If RandomizedDelaySec= and AccuracySec= are used
>> in conjunction, first the randomized delay is added, and
>> then the result is possibly further shifted to coalesce it
>> with other timer events happening on the system. As
>> mentioned above AccuracySec= defaults to 1 minute and
>> RandomizedDelaySec= to 0, thus encouraging coalescing of
>> timer events. In order to optimally stretch timer events over
>> a certain range of time, set AccuracySec=1us and
>> RandomizedDelaySec= to some higher value.
>>
>> FixedRandomDelay=
>> Takes a boolean argument. When enabled, the randomized
>> offset specified by RandomizedDelaySec= is reused for all
>> firings of the same timer. For a given timer unit, the
>> offset depends on the machine ID, user identifier and timer
>> name, which means that it is stable between restarts of the
>> manager. This effectively creates a fixed offset for an
>> individual timer, reducing the jitter in firings of this
>> timer, while still avoiding firing at the same time as other
>> similarly configured timers.
>>
>> This setting has no effect if RandomizedDelaySec= is set to
>> 0. Defaults to false.
>
>
>
I'm putting Julian (the maintainer of apt and therefor apt-daily.timer)
into the loop here.
Julian, please have a look at
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=997943#42 and
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=997943#47
What were your expectations regarding the timer and the currently
documented behavior?
Afaics, Persistent=true is functional, but the behaviour of
RandomizedDelaySec= changed slighly which might affect timers which
chose a long delay.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/pkg-systemd-maintainers/attachments/20211027/525e1c35/attachment-0001.sig>
More information about the Pkg-systemd-maintainers
mailing list