timer: order OnCalendar units after timer-sync.target if DefaultDependencies=no
Avoids triggering timers prematurely on systems with significantly inaccurate clocks, or some embedded platforms that lack one entirely.
This commit is contained in:
parent
eb7040ec50
commit
19f8d03783
2
TODO
2
TODO
|
@ -71,8 +71,6 @@ Features:
|
||||||
|
|
||||||
* Add a new verb "systemctl top"
|
* Add a new verb "systemctl top"
|
||||||
|
|
||||||
* order OnCalendar timer units after timer-sync.target if DefaultDependencies=no so that we don't trigger them prematurely
|
|
||||||
|
|
||||||
* refuse mounting on symlinks
|
* refuse mounting on symlinks
|
||||||
|
|
||||||
* logind: allow users to kill or lock their own sessions
|
* logind: allow users to kill or lock their own sessions
|
||||||
|
|
|
@ -78,15 +78,20 @@
|
||||||
<varname>Unit=</varname> (see below).</para>
|
<varname>Unit=</varname> (see below).</para>
|
||||||
|
|
||||||
<para>Unless <varname>DefaultDependencies=</varname>
|
<para>Unless <varname>DefaultDependencies=</varname>
|
||||||
is set to <option>false</option>, timer units will
|
is set to <option>false</option>, all timer units will
|
||||||
implicitly have dependencies of type
|
implicitly have dependencies of type
|
||||||
<varname>Conflicts=</varname> and
|
<varname>Conflicts=</varname> and
|
||||||
<varname>Before=</varname> on
|
<varname>Before=</varname> on
|
||||||
<filename>shutdown.target</filename>. These ensure
|
<filename>shutdown.target</filename> to ensure that
|
||||||
that timer units are stopped cleanly prior to system
|
they are stopped cleanly prior to system shutdown.
|
||||||
shutdown. Only timer units involved with early boot or
|
Timer units with at least one
|
||||||
late system shutdown should disable this
|
<varname>OnCalendar=</varname> directive will have an
|
||||||
option.</para>
|
additional <varname>After=</varname> dependency on
|
||||||
|
<filename>timer-sync.target</filename> to avoid
|
||||||
|
being started before the system clock has been
|
||||||
|
correctly set. Only timer units involved with early
|
||||||
|
boot or late system shutdown should disable the
|
||||||
|
<varname>DefaultDependencies=</varname> option.</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
|
|
@ -95,6 +95,7 @@ static int timer_verify(Timer *t) {
|
||||||
|
|
||||||
static int timer_add_default_dependencies(Timer *t) {
|
static int timer_add_default_dependencies(Timer *t) {
|
||||||
int r;
|
int r;
|
||||||
|
TimerValue *v;
|
||||||
|
|
||||||
assert(t);
|
assert(t);
|
||||||
|
|
||||||
|
@ -106,6 +107,15 @@ static int timer_add_default_dependencies(Timer *t) {
|
||||||
r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true);
|
r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
LIST_FOREACH(value, v, t->values) {
|
||||||
|
if (v->base == TIMER_CALENDAR) {
|
||||||
|
r = unit_add_dependency_by_name(UNIT(t), UNIT_AFTER, SPECIAL_TIME_SYNC_TARGET, NULL, true);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return unit_add_two_dependencies_by_name(UNIT(t), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
|
return unit_add_two_dependencies_by_name(UNIT(t), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
|
||||||
|
|
|
@ -57,13 +57,13 @@
|
||||||
#define SPECIAL_REMOTE_FS_PRE_TARGET "remote-fs-pre.target"
|
#define SPECIAL_REMOTE_FS_PRE_TARGET "remote-fs-pre.target"
|
||||||
#define SPECIAL_SWAP_TARGET "swap.target"
|
#define SPECIAL_SWAP_TARGET "swap.target"
|
||||||
#define SPECIAL_NETWORK_ONLINE_TARGET "network-online.target"
|
#define SPECIAL_NETWORK_ONLINE_TARGET "network-online.target"
|
||||||
|
#define SPECIAL_TIME_SYNC_TARGET "time-sync.target" /* LSB's $time */
|
||||||
#define SPECIAL_BASIC_TARGET "basic.target"
|
#define SPECIAL_BASIC_TARGET "basic.target"
|
||||||
|
|
||||||
/* LSB compatibility */
|
/* LSB compatibility */
|
||||||
#define SPECIAL_NETWORK_TARGET "network.target" /* LSB's $network */
|
#define SPECIAL_NETWORK_TARGET "network.target" /* LSB's $network */
|
||||||
#define SPECIAL_NSS_LOOKUP_TARGET "nss-lookup.target" /* LSB's $named */
|
#define SPECIAL_NSS_LOOKUP_TARGET "nss-lookup.target" /* LSB's $named */
|
||||||
#define SPECIAL_RPCBIND_TARGET "rpcbind.target" /* LSB's $portmap */
|
#define SPECIAL_RPCBIND_TARGET "rpcbind.target" /* LSB's $portmap */
|
||||||
#define SPECIAL_TIME_SYNC_TARGET "time-sync.target" /* LSB's $time */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Rules regarding adding further high level targets like the above:
|
* Rules regarding adding further high level targets like the above:
|
||||||
|
|
Loading…
Reference in New Issue