Bug#997943: systemd: Persistent attribute of timer is ignored
Michael Biebl
biebl at debian.org
Wed Oct 27 20:42:39 BST 2021
On 27.10.21 21:19, Michael Biebl wrote:
>
> 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.
Possibly related
https://github.com/systemd/systemd/pull/11608
-------------- 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/f3714f9a/attachment.sig>
More information about the Pkg-systemd-maintainers
mailing list