diff --git a/man/systemd.timer.xml b/man/systemd.timer.xml index 9fe7ff3255..84c5bb564c 100644 --- a/man/systemd.timer.xml +++ b/man/systemd.timer.xml @@ -81,10 +81,12 @@ units involved with early boot or late system shutdown should disable the DefaultDependencies= option. - Timer units - with at least one OnCalendar= directive will have an additional After= - dependency on time-sync.target to avoid being started before the system clock has been - correctly set. + Timer units with at least one OnCalendar= directive acquire a pair + of additional After= dependencies on time-set.target and + time-sync.target, in order to avoid being started before the system clock has + been correctly set. See + systemd.special7 + for details on these two targets. diff --git a/src/basic/special.h b/src/basic/special.h index d55b3289de..b9b7be7a7d 100644 --- a/src/basic/special.h +++ b/src/basic/special.h @@ -42,6 +42,7 @@ #define SPECIAL_SWAP_TARGET "swap.target" #define SPECIAL_NETWORK_ONLINE_TARGET "network-online.target" #define SPECIAL_TIME_SYNC_TARGET "time-sync.target" /* LSB's $time */ +#define SPECIAL_TIME_SET_TARGET "time-set.target" #define SPECIAL_BASIC_TARGET "basic.target" /* LSB compatibility */ diff --git a/src/core/timer.c b/src/core/timer.c index f42c86da76..32abdb74d7 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -99,13 +99,20 @@ static int timer_add_default_dependencies(Timer *t) { if (r < 0) 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, true, UNIT_DEPENDENCY_DEFAULT); + LIST_FOREACH(value, v, t->values) { + const char *target; + + if (v->base != TIMER_CALENDAR) + continue; + + FOREACH_STRING(target, SPECIAL_TIME_SYNC_TARGET, SPECIAL_TIME_SET_TARGET) { + r = unit_add_dependency_by_name(UNIT(t), UNIT_AFTER, target, true, UNIT_DEPENDENCY_DEFAULT); if (r < 0) return r; - break; } + + break; + } } return unit_add_two_dependencies_by_name(UNIT(t), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT); diff --git a/units/systemd-timesyncd.service.in b/units/systemd-timesyncd.service.in index 62120d8190..c0d63f5c70 100644 --- a/units/systemd-timesyncd.service.in +++ b/units/systemd-timesyncd.service.in @@ -16,7 +16,7 @@ DefaultDependencies=no After=systemd-sysusers.service Before=time-set.target sysinit.target shutdown.target Conflicts=shutdown.target -Wants=time-set.target time-sync.target +Wants=time-set.target [Service] AmbientCapabilities=CAP_SYS_TIME