<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="systemd.target">
  <refentryinfo>
    <title>systemd.target</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>systemd.target</refentrytitle>
    <manvolnum>5</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>systemd.target</refname>
    <refpurpose>Target unit configuration</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <para><filename><replaceable>target</replaceable>.target</filename></para>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>A unit configuration file whose name ends in
    <literal>.target</literal> encodes information about a target unit
    of systemd, which is used for grouping units and as well-known
    synchronization points during start-up.</para>

    <para>This unit type has no specific options. See
    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    for the common options of all unit configuration files. The common
    configuration items are configured in the generic [Unit] and
    [Install] sections. A separate [Target] section does not exist,
    since no target-specific options may be configured.</para>

    <para>Target units do not offer any additional functionality on
    top of the generic functionality provided by units. They exist
    merely to group units via dependencies (useful as boot targets),
    and to establish standardized names for synchronization points
    used in dependencies between units. Among other things, target
    units are a more flexible replacement for SysV runlevels in the
    classic SysV init system. (And for compatibility reasons special
    target units such as <filename>runlevel3.target</filename> exist
    which are used by the SysV runlevel compatibility code in systemd.
    See
    <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
    for details).</para>
  </refsect1>

  <refsect1>
    <title>Automatic Dependencies</title>

    <refsect2>
      <title>Implicit Dependencies</title>

      <para>There are no implicit dependencies for target units.</para>
    </refsect2>

    <refsect2>
      <title>Default Dependencies</title>

      <para>The following dependencies are added unless
      <varname>DefaultDependencies=no</varname> is set:</para>

      <itemizedlist>
        <listitem><para>Target units will automatically complement all
        configured dependencies of type <varname>Wants=</varname> or
        <varname>Requires=</varname> with dependencies of type
        <varname>After=</varname> unless <varname>DefaultDependencies=no</varname>
        is set in the specified units. Note that <varname>Wants=</varname> or
        <varname>Requires=</varname> must be defined in the target unit itself — if
        you for example define <varname>Wants=</varname>some.target in
        some.service, the automatic ordering will not be added.</para></listitem>

        <listitem><para>Target units automatically gain <varname>Conflicts=</varname>
        and <varname>Before=</varname> dependencies against
        <filename>shutdown.target</filename>.</para></listitem>
      </itemizedlist>
    </refsect2>
  </refsect1>

  <refsect1>
    <title>Options</title>

    <para>Target unit files may include [Unit] and [Install] sections, which are described in
    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
    No options specific to this file type are supported.</para>
  </refsect1>

  <refsect1>
    <title>Example</title>

    <example>
      <title>Simple standalone target</title>

      <programlisting># emergency-net.target

[Unit]
Description=Emergency Mode with Networking
Requires=emergency.target systemd-networkd.service
After=emergency.target systemd-networkd.service
AllowIsolate=yes</programlisting>

      <para>When adding dependencies to other units, it's important to check if they set
      <varname>DefaultDependencies=</varname>. Service units, unless they set
      <varname>DefaultDependencies=no</varname>, automatically get a dependency on
      <filename>sysinit.target</filename>. In this case, both
      <filename>emergency.target</filename> and <filename>systemd-networkd.service</filename>
      have <varname>DefaultDependencies=no</varname>, so they are suitable for use
      in this target, and do not pull in <filename>sysinit.target</filename>.</para>

      <para>You can now switch into this emergency mode by running <varname>systemctl
      isolate emergency-net.target</varname> or by passing the option
      <varname>systemd.unit=emergency-net.target</varname> on the kernel command
      line.</para>

      <para>Other units can have <varname>WantedBy=emergency-net.target</varname> in the
      <varname>[Install]</varname> section. After they are enabled using
      <command>systemctl enable</command>, they will be started before
      <varname>emergency-net.target</varname> is started. It is also possible to add
      arbitrary units as dependencies of <filename>emergency.target</filename> without
      modifying them by using <command>systemctl add-wants</command>.
      </para>
    </example>
  </refsect1>

  <refsect1>
      <title>See Also</title>
      <para>
        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
      </para>
  </refsect1>

</refentry>
