units: introduce new timers.target and paths.target to hook timer/path units into for boot

This commit is contained in:
Lennart Poettering 2013-03-25 21:20:08 +01:00
parent 1b036593b7
commit e3d84721dc
13 changed files with 319 additions and 160 deletions

View file

@ -193,8 +193,8 @@ SHUTDOWN_TARGET_WANTS =
LOCAL_FS_TARGET_WANTS = LOCAL_FS_TARGET_WANTS =
MULTI_USER_TARGET_WANTS = MULTI_USER_TARGET_WANTS =
SYSINIT_TARGET_WANTS = SYSINIT_TARGET_WANTS =
BASIC_TARGET_WANTS =
SOCKETS_TARGET_WANTS = SOCKETS_TARGET_WANTS =
TIMERS_TARGET_WANTS =
SYSTEM_UNIT_ALIASES = SYSTEM_UNIT_ALIASES =
USER_UNIT_ALIASES = USER_UNIT_ALIASES =
@ -211,8 +211,8 @@ install-target-wants-hook:
what="$(LOCAL_FS_TARGET_WANTS)" && wants=local-fs.target && $(add-wants) what="$(LOCAL_FS_TARGET_WANTS)" && wants=local-fs.target && $(add-wants)
what="$(MULTI_USER_TARGET_WANTS)" && wants=multi-user.target && $(add-wants) what="$(MULTI_USER_TARGET_WANTS)" && wants=multi-user.target && $(add-wants)
what="$(SYSINIT_TARGET_WANTS)" && wants=sysinit.target && $(add-wants) what="$(SYSINIT_TARGET_WANTS)" && wants=sysinit.target && $(add-wants)
what="$(BASIC_TARGET_WANTS)" && wants=basic.target && $(add-wants)
what="$(SOCKETS_TARGET_WANTS)" && wants=sockets.target && $(add-wants) what="$(SOCKETS_TARGET_WANTS)" && wants=sockets.target && $(add-wants)
what="$(TIMERS_TARGET_WANTS)" && wants=timers.target && $(add-wants)
define add-wants define add-wants
[ -z "$$what" ] || ( \ [ -z "$$what" ] || ( \
@ -371,6 +371,8 @@ dist_systemunit_DATA = \
units/sigpwr.target \ units/sigpwr.target \
units/sleep.target \ units/sleep.target \
units/sockets.target \ units/sockets.target \
units/timers.target \
units/paths.target \
units/suspend.target \ units/suspend.target \
units/swap.target \ units/swap.target \
units/systemd-initctl.socket \ units/systemd-initctl.socket \
@ -3916,7 +3918,7 @@ SYSINIT_TARGET_WANTS += \
systemd-tmpfiles-setup.service \ systemd-tmpfiles-setup.service \
systemd-sysctl.service \ systemd-sysctl.service \
systemd-ask-password-console.path systemd-ask-password-console.path
BASIC_TARGET_WANTS += \ TIMERS_TARGET_WANTS += \
systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.timer
if HAVE_SYSV_COMPAT if HAVE_SYSV_COMPAT
@ -3938,6 +3940,8 @@ SYSTEM_UNIT_ALIASES += \
USER_UNIT_ALIASES += \ USER_UNIT_ALIASES += \
$(systemunitdir)/shutdown.target shutdown.target \ $(systemunitdir)/shutdown.target shutdown.target \
$(systemunitdir)/sockets.target sockets.target \ $(systemunitdir)/sockets.target sockets.target \
$(systemunitdir)/timers.target timers.target \
$(systemunitdir)/paths.target paths.target \
$(systemunitdir)/bluetooth.target bluetooth.target \ $(systemunitdir)/bluetooth.target bluetooth.target \
$(systemunitdir)/printer.target printer.target \ $(systemunitdir)/printer.target printer.target \
$(systemunitdir)/sound.target sound.target $(systemunitdir)/sound.target sound.target

View file

@ -50,18 +50,20 @@
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para>A number of different components are involved in the <para>A number of different components are involved in
system boot. Immediately after power-up, the system the system boot. Immediately after power-up, the
BIOS will do minimal hardware initialization, and hand system BIOS will do minimal hardware initialization,
control over to a boot loader stored on a persistent and hand control over to a boot loader stored on a
storage device. This boot loader will then invoke an persistent storage device. This boot loader will then
OS kernel from disk (or the network). In the Linux invoke an OS kernel from disk (or the network). In the
case this kernel now (optionally) extracts and Linux case this kernel (optionally) extracts and
executes an initial RAM disk image (initrd) such as executes an initial RAM disk image (initrd) such as
<citerefentry><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry> <citerefentry><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
which looks for the root file system. After the root which looks for the root file system (possibly using
file system is found and mounted the initrd hands over <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
control to the system manager (such as for this). After the root file system is found and
mounted the initrd hands over control to the host's
system manager (such as
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>) <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>)
stored on the OS image which is then responsible for stored on the OS image which is then responsible for
probing all remaining hardware, mounting all necessary probing all remaining hardware, mounting all necessary
@ -132,35 +134,35 @@
v v
sysinit.target sysinit.target
| |
_________________/|\___________________ ____________________________________/|\________________________________________
/ | \ / | | | \
| | | | | | | |
v | v v v | v v
(various | rescue.service (various (various | (various rescue.service
sockets...) | | timers...) paths...) | sockets...) |
| | v | | | | v
v | <emphasis>rescue.target</emphasis> v v | v <emphasis>rescue.target</emphasis>
sockets.target | timers.target paths.target | sockets.target
| | | | | |
\_________________ | \__________________|_________________ | ___________________/
\| \|/
v v
basic.target basic.target
| |
__________________________________/| emergency.service ____________________________________/| emergency.service
/ | | | / | | |
| | | v | | | v
v v v <emphasis>emergency.target</emphasis> v v v <emphasis>emergency.target</emphasis>
display- (various system (various system display- (various system (various system
manager.service services services) manager.service services services)
| required for | | required for |
| graphical UIs) v | graphical UIs) v
| | <emphasis>multi-user.target</emphasis> | | <emphasis>multi-user.target</emphasis>
| | | | | |
\_______________ | _________________/ \_________________ | _________________/
\|/ \|/
v v
<emphasis>graphical.target</emphasis></programlisting> <emphasis>graphical.target</emphasis></programlisting>
<para>Target units that are commonly used as boot <para>Target units that are commonly used as boot
targets are <emphasis>emphasized</emphasis>. These targets are <emphasis>emphasized</emphasis>. These
@ -174,23 +176,41 @@
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>Initrd System Manager Bootup</title> <title>Bootup in the Initial RAM Disk (initrd)</title>
<para>The default target in the initrd is the initrd.target. The bootup process is <para>The initial RAM disk implementation (initrd) can
identical to the System Manager Bootup until it reaches basic.target. From there, be set up using systemd as well. In this case boot up
systemd approaches the special initrd.target. If the root device can be mounted at inside the initrd follows the following
/sysroot, the sysroot.mount unit becomes active and the initrd-root-fs.target is structure.</para>
reached.
The initrd-parse-etc.service scans /sysroot/etc/fstab for a possible /usr mountpoint <para>The default target in the initrd is
and additional entries marked with the <emphasis>x-initrd.mount</emphasis> option. <filename>initrd.target</filename>. The bootup process
All entries found are mounted below /sysroot, and the initrd-fs.target is reached. begins identical to the system manager bootup (see
The initrd-cleanup.service isolates to the initrd-switch-root.target, where cleanup above) until it reaches
services can run. As the very last step, the initrd-switch-root.service is activated, <filename>basic.target</filename>. From there, systemd
which will cause the system to switch its root to /sysroot. approaches the special target
<filename>initrd.target</filename>. If the root device
can be mounted at <filename>/sysroot</filename>, the
<filename>sysroot.mount</filename> unit becomes active
and <filename>initrd-root-fs.target</filename> is
reached. The service
<filename>initrd-parse-etc.service</filename> scans
<filename>/sysroot/etc/fstab</filename> for a possible
<filename>/usr</filename> mount point and additional
entries marked with the
<emphasis>x-initrd.mount</emphasis> option. All
entries found are mounted below
<filename>/sysroot</filename>, and
<filename>initrd-fs.target</filename> is reached. The
service <filename>initrd-cleanup.service</filename>
isolates to the
<filename>initrd-switch-root.target</filename>, where
cleanup services can run. As the very last step, the
<filename>initrd-switch-root.service</filename> is
activated, which will cause the system to switch its
root to <filename>/sysroot</filename>.
</para> </para>
<programlisting> <programlisting> : (beginning identical to above)
(identical to System Manager Bootup)
:
: :
v v
basic.target basic.target
@ -203,13 +223,13 @@
| initrd-root-fs.target | initrd-root-fs.target
| | | |
| v | v
| initrd-parse-etc.service v initrd-parse-etc.service
(custom initrd services) | (custom initrd |
| v services...) v
| (sysroot-usr.mount and | (sysroot-usr.mount and
| various mounts marked | various mounts marked
| with fstab option | with fstab option
| x-initrd.mount) | x-initrd.mount...)
| | | |
| v | v
| initrd-fs.target | initrd-fs.target
@ -225,11 +245,11 @@
| |
v v
______________________/| ______________________/|
/ | / v
| initrd-udevadm-cleanup-db.service | initrd-udevadm-cleanup-db.service
| | v |
(custom initrd services) | (custom initrd |
| | services...) |
\______________________ | \______________________ |
\| \|
v v
@ -239,17 +259,16 @@
initrd-switch-root.service initrd-switch-root.service
| |
v v
switch-root Transition to Host OS</programlisting>
</programlisting>
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>System Manager Shutdown</title> <title>System Manager Shutdown</title>
<para>System shutdown also consists of various target <para>System shutdown with systemd also consists of
units with some minimal ordering structure various target units with some minimal ordering
applied:</para> structure applied:</para>

View file

@ -73,6 +73,7 @@
<filename>network.target</filename>, <filename>network.target</filename>,
<filename>nss-lookup.target</filename>, <filename>nss-lookup.target</filename>,
<filename>nss-user-lookup.target</filename>, <filename>nss-user-lookup.target</filename>,
<filename>paths.target</filename>,
<filename>poweroff.target</filename>, <filename>poweroff.target</filename>,
<filename>printer.target</filename>, <filename>printer.target</filename>,
<filename>reboot.target</filename>, <filename>reboot.target</filename>,
@ -97,6 +98,7 @@
<filename>syslog.socket</filename>, <filename>syslog.socket</filename>,
<filename>system-update.target</filename>, <filename>system-update.target</filename>,
<filename>time-sync.target</filename>, <filename>time-sync.target</filename>,
<filename>timers.target</filename>,
<filename>umount.target</filename></para> <filename>umount.target</filename></para>
</refsynopsisdiv> </refsynopsisdiv>
@ -116,22 +118,23 @@
<term><filename>basic.target</filename></term> <term><filename>basic.target</filename></term>
<listitem> <listitem>
<para>A special target unit <para>A special target unit
covering early boot-up.</para> covering basic boot-up.</para>
<para>systemd automatically <para>systemd automatically
adds dependencies of the types adds dependencies of the types
Requires and After for this <varname>Requires=</varname>
target unit to all SysV and <varname>After=</varname>
service units configured for for this target unit to all
runlevel 1 to 5.</para> services (except for those
<para>Usually this should pull-in with
all sockets, mount points, <varname>DefaultDependencies=no</varname>).</para>
swap devices and other basic
<para>Usually this should
pull-in all mount points, swap
devices, sockets, timers, and
path units and other basic
initialization necessary for initialization necessary for
the general purpose general purpose
daemons. Most normal daemons daemons.</para>
should have dependencies of
type After and Requires on
this unit.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -139,9 +142,15 @@
<listitem> <listitem>
<para>This target is started <para>This target is started
automatically as soon as a automatically as soon as a
bluetooth controller is Bluetooth controller is
plugged in or becomes plugged in or becomes
available at boot.</para> available at boot.</para>
<para>This may be used to pull
in Bluetooth management
daemons dynamically when
Bluetooth hardware is
found.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -169,7 +178,7 @@
<term><filename>dbus.service</filename></term> <term><filename>dbus.service</filename></term>
<listitem> <listitem>
<para>A special unit for the <para>A special unit for the
D-Bus system bus. As soon as D-Bus bus daemon. As soon as
this service is fully started this service is fully started
up systemd will connect to it up systemd will connect to it
and register its and register its
@ -182,7 +191,7 @@
<para>A special unit for the <para>A special unit for the
D-Bus system bus socket. All D-Bus system bus socket. All
units with units with
<literal>Type=dbus</literal> <varname>Type=dbus</varname>
automatically gain a automatically gain a
dependency on this dependency on this
unit.</para> unit.</para>
@ -198,6 +207,7 @@
<filename>multi-user.target</filename> <filename>multi-user.target</filename>
or or
<filename>graphical.target</filename>.</para> <filename>graphical.target</filename>.</para>
<para>The default unit systemd <para>The default unit systemd
starts at bootup can be starts at bootup can be
overridden with the overridden with the
@ -247,8 +257,10 @@
<term><filename>getty.target</filename></term> <term><filename>getty.target</filename></term>
<listitem> <listitem>
<para>A special target unit <para>A special target unit
that pulls in all local TTY that pulls in statically
<filename>getty</filename> instances. configured local TTY
<filename>getty</filename>
instances.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -261,11 +273,17 @@
<filename>multi-user.target</filename>.</para> <filename>multi-user.target</filename>.</para>
<para>Units that are needed <para>Units that are needed
for graphical login shall add for graphical logins shall add
Wants dependencies for their <varname>Wants=</varname>
unit to this unit (or dependencies for their unit to
this unit (or
<filename>multi-user.target</filename>) <filename>multi-user.target</filename>)
during installation.</para> during installation. This is
best configured via
<varname>WantedBy=graphical.target</varname>
in the unit's
<literal>[Install]</literal>
section.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -290,7 +308,13 @@
<term><filename>halt.target</filename></term> <term><filename>halt.target</filename></term>
<listitem> <listitem>
<para>A special target unit <para>A special target unit
for shutting down and halting the system.</para> for shutting down and halting
the system. Note that this
target is distinct from
<filename>poweroff.target</filename>
in that it generally really
just halts the system rather
than powering it down.</para>
<para>Applications wanting to <para>Applications wanting to
halt the system should start halt the system should start
@ -300,16 +324,17 @@
<varlistentry> <varlistentry>
<term><filename>initrd-fs.target</filename></term> <term><filename>initrd-fs.target</filename></term>
<listitem> <listitem>
<para>systemd automatically <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>3</manvolnum></citerefentry>
adds dependencies of type automatically adds
Before to sysroot-usr.mount and dependencies of type
all mount points fround in <varname>Before=</varname> to
<filename>sysroot-usr.mount</filename>
and all mount points fround in
<filename>/etc/fstab</filename> <filename>/etc/fstab</filename>
that have the that have the
<option>auto</option> and <option>auto</option> and
<option>x-initrd.mount</option> <option>x-initrd.mount</option>
mount options set. mount options set.
See also <literal>systemd-fstab-generator</literal>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -338,20 +363,21 @@
<varlistentry> <varlistentry>
<term><filename>local-fs.target</filename></term> <term><filename>local-fs.target</filename></term>
<listitem> <listitem>
<para>systemd automatically <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>3</manvolnum></citerefentry>
automatically adds
dependencies of type
<varname>Before=</varname> to
all mount units that refer to
local mount points for this
target unit. In addition, it
adds dependencies of type adds dependencies of type
After to all mount units that <varname>Wants=</varname> to
refer to local mount points
for this target unit. In
addition, systemd adds
dependencies of type Wants to
this target unit for those this target unit for those
mounts listed in mounts listed in
<filename>/etc/fstab</filename> <filename>/etc/fstab</filename>
that have the that have the
<option>auto</option> and <option>auto</option> mount
<option>comment=systemd.mount</option> option set.</para>
mount options set.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -377,9 +403,15 @@
<para>Units that are needed <para>Units that are needed
for a multi-user system shall for a multi-user system shall
add Wants dependencies to add <varname>Wants=</varname>
this unit for their unit during dependencies for their unit to
installation.</para> this unit during
installation. This is best
configured via
<varname>WantedBy=multi-uer.target</varname>
in the unit's
<literal>[Install]</literal>
section.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -387,10 +419,10 @@
<listitem> <listitem>
<para>systemd automatically <para>systemd automatically
adds dependencies of type adds dependencies of type
After for this target unit to <varname>After=</varname> for
all SysV init script service this target unit to all SysV
units with an LSB header init script service units with
referring to the an LSB header referring to the
<literal>$network</literal> <literal>$network</literal>
facility.</para> facility.</para>
@ -418,7 +450,8 @@
<filename>nss-user-lookup.target</filename> <filename>nss-user-lookup.target</filename>
should be used. systemd should be used. systemd
automatically adds automatically adds
dependencies of type After for dependencies of type
<varname>After=</varname> for
this target unit to all SysV this target unit to all SysV
init script service units with init script service units with
an LSB header referring to the an LSB header referring to the
@ -440,6 +473,29 @@
should be used. </para> should be used. </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><filename>paths.target</filename></term>
<listitem>
<para>A special target unit
that sets up all path units
(see
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details) that shall be
active after boot.</para>
<para>It is recommended that
path units installed by
applications get pulled in via
<varname>Wants=</varname>
dependencies from this
unit. This is best configured
via a
<varname>WantedBy=paths.target</varname>
in the path unit's
<literal>[Install]</literal>
section.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><filename>poweroff.target</filename></term> <term><filename>poweroff.target</filename></term>
<listitem> <listitem>
@ -463,6 +519,12 @@
printer is plugged in or printer is plugged in or
becomes available at becomes available at
boot.</para> boot.</para>
<para>This may be used to pull
in printer management
daemons dynamically when
printer hardware is
found.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -490,10 +552,10 @@
<para>systemd automatically <para>systemd automatically
adds dependencies of type adds dependencies of type
After for this target unit to <varname>After=</varname> for
all SysV init script service this target unit to all SysV
units with an LSB header init script service units with
referring to the an LSB header referring to the
<literal>$remote_fs</literal> <literal>$remote_fs</literal>
facility.</para> facility.</para>
</listitem> </listitem>
@ -525,11 +587,14 @@
<varlistentry> <varlistentry>
<term><filename>initrd-root-fs.target</filename></term> <term><filename>initrd-root-fs.target</filename></term>
<listitem> <listitem>
<para>systemd automatically <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>3</manvolnum></citerefentry>
adds dependencies of type automatically adds
Before to the sysroot.mount unit, dependencies of type
which is generated from the kernel command <varname>Before=</varname> to
line by the <literal>systemd-fstab-generator</literal>. the
<filename>sysroot.mount</filename>
unit, which is generated from
the kernel command line.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -538,10 +603,10 @@
<listitem> <listitem>
<para>systemd automatically <para>systemd automatically
adds dependencies of type adds dependencies of type
After for this target unit to <varname>After=</varname> for
all SysV init script service this target unit to all SysV
units with an LSB header init script service units with
referring to the an LSB header referring to the
<literal>$portmap</literal> <literal>$portmap</literal>
facility.</para> facility.</para>
</listitem> </listitem>
@ -574,20 +639,12 @@
<para>Services that shall be <para>Services that shall be
terminated on system shutdown terminated on system shutdown
shall add Conflicts shall add <varname>Conflicts=</varname>
dependencies to this unit for dependencies to this unit for
their service unit, which is their service unit, which is
implicitly done when implicitly done when
<varname>DefaultDependencies=yes</varname> <varname>DefaultDependencies=yes</varname>
is set (the default).</para> is set (the default).</para>
<para>systemd automatically
adds dependencies of type
Conflicts to this target unit
for all SysV init script
service units that shall be
terminated in SysV runlevels 0
or 6.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -607,7 +664,9 @@
<para>A special target unit <para>A special target unit
that is pulled in by that is pulled in by
<filename>suspend.target</filename>, <filename>suspend.target</filename>,
<filename>hibernate.target</filename> and <filename>hybrid-sleep.target</filename> <filename>hibernate.target</filename>
and
<filename>hybrid-sleep.target</filename>
and may be used to hook units and may be used to hook units
into the sleep state into the sleep state
logic.</para> logic.</para>
@ -621,20 +680,35 @@
smartcard controller is smartcard controller is
plugged in or becomes plugged in or becomes
available at boot.</para> available at boot.</para>
<para>This may be used to pull
in printer management
daemons dynamically when
smartcard hardware is
found.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><filename>sockets.target</filename></term> <term><filename>sockets.target</filename></term>
<listitem> <listitem>
<para>A special target unit <para>A special target unit
that sets up all service that sets up all socket
sockets.</para> units.(see
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details) that shall be
active after boot.</para>
<para>Services that can be <para>Services that can be
socket-activated shall add socket-activated shall add
Wants dependencies to this <varname>Wants=</varname>
unit for their socket unit dependencies to this unit for
during installation.</para> their socket unit during
installation. This is best
configured via a
<varname>WantedBy=sockets.target</varname>
in the socket unit's
<literal>[Install]</literal>
section.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -645,6 +719,11 @@
sound card is plugged in or sound card is plugged in or
becomes available at becomes available at
boot.</para> boot.</para>
<para>This may be used to pull
in audio management daemons
dynamically when printer
hardware is found.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -710,14 +789,37 @@
<listitem> <listitem>
<para>systemd automatically <para>systemd automatically
adds dependencies of type adds dependencies of type
After for this target unit to <varname>After=</varname> for
all SysV init script service this target unit to all SysV
units with an LSB header init script service units with
referring to the an LSB header referring to the
<literal>$time</literal> <literal>$time</literal>
facility.</para> facility.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><filename>timers.target</filename></term>
<listitem>
<para>A special target unit
that sets up all timer
units (see
<citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details) that shall be
active after boot.</para>
<para>It is recommended that
timer units installed by
applications get pulled in via
<varname>Wants=</varname>
dependencies from this
unit. This is best configured
via
<varname>WantedBy=timers.target</varname>
in the timer unit's
<literal>[Install]</literal>
section.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><filename>umount.target</filename></term> <term><filename>umount.target</filename></term>
<listitem> <listitem>
@ -788,7 +890,7 @@
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry> <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para> </para>
</refsect1> </refsect1>

View file

@ -361,12 +361,12 @@ static int path_add_default_dependencies(Path *p) {
assert(p); assert(p);
if (UNIT(p)->manager->running_as == SYSTEMD_SYSTEM) { r = unit_add_dependency_by_name(UNIT(p), UNIT_BEFORE,
r = unit_add_dependency_by_name(UNIT(p), UNIT_BEFORE, SPECIAL_PATHS_TARGET, NULL, true);
SPECIAL_BASIC_TARGET, NULL, true); if (r < 0)
if (r < 0) return r;
return r;
if (UNIT(p)->manager->running_as == SYSTEMD_SYSTEM) {
r = unit_add_two_dependencies_by_name(UNIT(p), UNIT_AFTER, UNIT_REQUIRES, r = unit_add_two_dependencies_by_name(UNIT(p), UNIT_AFTER, UNIT_REQUIRES,
SPECIAL_SYSINIT_TARGET, NULL, true); SPECIAL_SYSINIT_TARGET, NULL, true);
if (r < 0) if (r < 0)

View file

@ -1148,6 +1148,16 @@ static int service_add_default_dependencies(Service *s) {
SPECIAL_SOCKETS_TARGET, NULL, true); SPECIAL_SOCKETS_TARGET, NULL, true);
if (r < 0) if (r < 0)
return r; return r;
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
SPECIAL_TIMERS_TARGET, NULL, true);
if (r < 0)
return r;
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
SPECIAL_PATHS_TARGET, NULL, true);
if (r < 0)
return r;
} }
/* Second, activate normal shutdown */ /* Second, activate normal shutdown */

View file

@ -331,11 +331,13 @@ static int socket_add_default_dependencies(Socket *s) {
int r; int r;
assert(s); assert(s);
if (UNIT(s)->manager->running_as == SYSTEMD_SYSTEM) { r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true);
if ((r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true)) < 0) if (r < 0)
return r; return r;
if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0) if (UNIT(s)->manager->running_as == SYSTEMD_SYSTEM) {
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true);
if (r < 0)
return r; return r;
} }

View file

@ -46,6 +46,8 @@
/* Early boot targets */ /* Early boot targets */
#define SPECIAL_SYSINIT_TARGET "sysinit.target" #define SPECIAL_SYSINIT_TARGET "sysinit.target"
#define SPECIAL_SOCKETS_TARGET "sockets.target" #define SPECIAL_SOCKETS_TARGET "sockets.target"
#define SPECIAL_TIMERS_TARGET "timers.target"
#define SPECIAL_PATHS_TARGET "paths.target"
#define SPECIAL_LOCAL_FS_TARGET "local-fs.target" #define SPECIAL_LOCAL_FS_TARGET "local-fs.target"
#define SPECIAL_LOCAL_FS_PRE_TARGET "local-fs-pre.target" #define SPECIAL_LOCAL_FS_PRE_TARGET "local-fs-pre.target"
#define SPECIAL_INITRD_FS_TARGET "initrd-fs.target" #define SPECIAL_INITRD_FS_TARGET "initrd-fs.target"

View file

@ -96,11 +96,11 @@ static int timer_add_default_dependencies(Timer *t) {
assert(t); assert(t);
if (UNIT(t)->manager->running_as == SYSTEMD_SYSTEM) { r = unit_add_dependency_by_name(UNIT(t), UNIT_BEFORE, SPECIAL_TIMERS_TARGET, NULL, true);
r = unit_add_dependency_by_name(UNIT(t), UNIT_BEFORE, SPECIAL_BASIC_TARGET, NULL, true); if (r < 0)
if (r < 0) return r;
return r;
if (UNIT(t)->manager->running_as == SYSTEMD_SYSTEM) {
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;

View file

@ -8,6 +8,6 @@
[Unit] [Unit]
Description=Basic System Description=Basic System
Documentation=man:systemd.special(7) Documentation=man:systemd.special(7)
Requires=sysinit.target sockets.target Requires=sysinit.target sockets.target timers.target paths.target
After=sysinit.target sockets.target After=sysinit.target sockets.target timers.target paths.target
RefuseManualStart=yes RefuseManualStart=yes

10
units/paths.target Normal file
View file

@ -0,0 +1,10 @@
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Paths
Documentation=man:systemd.special(7)

View file

@ -11,7 +11,7 @@ Documentation=man:systemd-ask-password-console.service(8)
DefaultDependencies=no DefaultDependencies=no
Conflicts=shutdown.target Conflicts=shutdown.target
After=plymouth-start.service After=plymouth-start.service
Before=basic.target shutdown.target Before=paths.target shutdown.target
ConditionPathExists=!/run/plymouth/pid ConditionPathExists=!/run/plymouth/pid
[Path] [Path]

View file

@ -10,7 +10,7 @@ Description=Forward Password Requests to Wall Directory Watch
Documentation=man:systemd-ask-password-console.service(8) Documentation=man:systemd-ask-password-console.service(8)
DefaultDependencies=no DefaultDependencies=no
Conflicts=shutdown.target Conflicts=shutdown.target
Before=basic.target shutdown.target Before=paths.target shutdown.target
[Path] [Path]
DirectoryNotEmpty=/run/systemd/ask-password DirectoryNotEmpty=/run/systemd/ask-password

10
units/timers.target Normal file
View file

@ -0,0 +1,10 @@
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Timers
Documentation=man:systemd.special(7)