<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<!--
  This file is part of systemd.

  Copyright 2010 Lennart Poettering

  systemd is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  systemd is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->

<refentry id="systemd">

        <refentryinfo>
                <title>systemd</title>
                <productname>systemd</productname>

                <authorgroup>
                        <author>
                                <contrib>Developer</contrib>
                                <firstname>Lennart</firstname>
                                <surname>Poettering</surname>
                                <email>lennart@poettering.net</email>
                        </author>
                </authorgroup>
        </refentryinfo>

        <refmeta>
                <refentrytitle>systemd</refentrytitle>
                <manvolnum>1</manvolnum>
        </refmeta>

        <refnamediv>
                <refname>systemd</refname>
                <refname>init</refname>
                <refpurpose>systemd System and Session Manager</refpurpose>
        </refnamediv>

        <refsynopsisdiv>
                <cmdsynopsis>
                        <command>systemd <arg choice="opt" rep="repeat">OPTIONS</arg></command>
                </cmdsynopsis>
                <cmdsynopsis>
                        <command>init <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="req">COMMAND</arg></command>
                </cmdsynopsis>
        </refsynopsisdiv>

        <refsect1>
                <title>Description</title>

                <para>systemd is a system and session manager for
                Linux operating systems. When run as first process on
                boot (as PID 1), it acts as init system that brings
                up and maintains userspace services.</para>

                <para>For compatibility with SysV, if systemd is called
                as <command>init</command> and a PID that is not
                1, it will execute <command>telinit</command> and pass
                all command line arguments unmodified. That means
                <command>init</command> and <command>telinit</command>
                are mostly equivalent when invoked from normal login sessions. See
                <citerefentry><refentrytitle>telinit</refentrytitle><manvolnum>8</manvolnum></citerefentry>
                for more information.</para>
        </refsect1>

        <refsect1>
                <title>Options</title>

                <para>The following options are understood:</para>

                <variablelist>
                        <varlistentry>
                                <term><option>-h</option></term>
                                <term><option>--help</option></term>

                                <listitem><para>Prints a short help
                                text and exits.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--unit=</option></term>

                                <listitem><para>Set default unit to
                                activate on startup. If not specified
                                defaults to
                                <filename>default.target</filename>.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--running-as=</option></term>

                                <listitem><para>Tell systemd to run in
                                a particular mode. Argument is one of
                                <option>system</option>,
                                <option>session</option>. Normally it
                                should not be necessary to pass this
                                option, as systemd automatically
                                detects the mode it is started
                                in. This call is hence of little use
                                except for
                                debugging.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--test</option></term>

                                <listitem><para>Determine startup
                                sequence, dump it and exit. This is an
                                option useful for debugging
                                only.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--dump-configuration-items</option></term>

                                <listitem><para>Dump understood unit
                                configuration items. This outputs a
                                terse but complete list of
                                configuration items understood in unit
                                definition files.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--confirm-spawn</option></term>

                                <listitem><para>Ask for confirmation when spawning processes.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--introspect=</option></term>

                                <listitem><para>Extract D-Bus
                                interface introspection data. This is
                                mostly useful at build at install time
                                to generate data suitable for the
                                D-Bus interfaces
                                repository. Optionally the interface
                                name for the introspection data may be
                                specified. If omitted, the
                                introspection data for all interfaces
                                is dumped.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--log-level=</option></term>

                                <listitem><para>Set log level. As
                                argument this accepts a numerical log
                                level or the well-known <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                                symbolic names (lowercase):
                                <option>emerg</option>,
                                <option>alert</option>,
                                <option>crit</option>,
                                <option>err</option>,
                                <option>warning</option>,
                                <option>notice</option>,
                                <option>info</option>,
                                <option>debug</option>.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--log-target=</option></term>

                                <listitem><para>Set log
                                target. Argument must be one of
                                <option>console</option>,
                                <option>syslog</option>,
                                <option>kmsg</option>,
                                <option>syslog-or-kmsg</option>,
                                <option>null</option>.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--log-color=</option></term>

                                <listitem><para>Highlight important
                                log messages. Argument is a boolean
                                value. If the argument is omitted it
                                defaults to
                                <option>true</option>.</para></listitem>
                        </varlistentry>
                        <varlistentry>
                                <term><option>--log-location=</option></term>

                                <listitem><para>Include code location
                                in log messages. This is mostly
                                relevant for debugging
                                purposes. Argument is a boolean
                                value. If the argument is omitted
                                it defaults to
                                <option>true</option>.</para></listitem>
                        </varlistentry>
                </variablelist>
        </refsect1>

        <refsect1>
                <title>Directories</title>

                <variablelist>
                        <varlistentry>
                                <term>System unit directories</term>

                                <listitem><para>The systemd system
                                manager reads unit configuration from
                                various directories. Packages that
                                want to install unit files shall place
                                them in the directory returned by
                                <command>pkg-config systemd
                                --variable=systemdsystemunitdir</command>. Other
                                directories checked are
                                <filename>/usr/local/share/systemd/system</filename>
                                and
                                <filename>/usr/share/systemd/system</filename>. User
                                configuration always takes
                                precedence. <command>pkg-config
                                systemd
                                --variable=systemdsystemconfdir</command>
                                returns the path of the system
                                configuration directory. Packages
                                should alter the content of these directories
                                only with the
                                <citerefentry><refentrytitle>systemd-install</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                                tool.</para></listitem>
                        </varlistentry>
                </variablelist>

                <variablelist>
                        <varlistentry>
                                <term>Session unit directories</term>

                                <listitem><para>Similar rules apply
                                for the session unit
                                directories. However, here the <ulink
                                url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
                                Base Directory specification</ulink>
                                is followed to find
                                units. Applications should place their
                                unit files in the directory returned
                                by <command>pkg-config systemd
                                --variable=systemdsessionunitdir</command>. Global
                                configuration is done in the
                                directory reported by
                                <command>pkg-config systemd
                                --variable=systemdsessionconfdir</command>. The
                                <citerefentry><refentrytitle>systemd-install</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                                tool can handle both global (i.e. for
                                all users) and private (for one user)
                                enabling/disabling of
                                units.</para></listitem>
                        </varlistentry>
                </variablelist>

                <variablelist>
                        <varlistentry>
                                <term>SysV init scripts directory</term>

                                <listitem><para>The location of the
                                SysV init script directory varies
                                between distributions. If systemd
                                cannot find a native unit file for a
                                requested service, it will look for a
                                SysV init script of the same name
                                (with the
                                <filename>.service</filename> suffix
                                removed).</para></listitem>
                        </varlistentry>
                </variablelist>

                <variablelist>
                        <varlistentry>
                                <term>SysV runlevel link farm directory</term>

                                <listitem><para>The location of the
                                SysV runlevel link farm directory
                                varies between distributions. systemd
                                will take the link farm into account
                                when figuring out whether a service
                                shall be enabled. Note that a service
                                unit with a native unit configuration
                                file can be started by activating it
                                in the SysV runlevel link
                                farm.</para></listitem>
                        </varlistentry>
                </variablelist>
        </refsect1>

        <refsect1>
                <title>Signals</title>

                <variablelist>
                        <varlistentry>
                                <term>SIGTERM</term>

                                <listitem><para>Upon receiving this
                                signal the systemd system manager
                                serializes its state, reexecutes
                                itself and deserializes the saved
                                state again. This is mostly equivalent
                                to <command>systemctl
                                daemon-reexec</command>.</para>

                                <para>systemd session managers will
                                start the
                                <filename>exit.target</filename> unit
                                when this signal is received. This is
                                mostly equivalent to
                                <command>systemctl --session start
                                exit.target</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGINT</term>

                                <listitem><para>Upon receiving this
                                signal the systemd system manager will
                                start the
                                <filename>ctrl-alt-del.target</filename> unit. This
                                is mostly equivalent to
                                <command>systemctl start
                                ctl-alt-del.target</command>.</para>

                                <para>systemd session managers
                                treat this signal the same way as
                                SIGTERM.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGWINCH</term>

                                <listitem><para>When this signal is
                                received the systemd system manager
                                will start the
                                <filename>kbrequest.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl start
                                kbrequest.target</command>.</para>

                                <para>This signal is ignored by
                                systemd session
                                managers.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGPWR</term>

                                <listitem><para>When this signal is
                                received the systemd manager
                                will start the
                                <filename>sigpwr.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl start
                                sigpwr.target</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGUSR1</term>

                                <listitem><para>When this signal is
                                received the systemd manager will try
                                to reconnect to the D-Bus
                                bus.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGUSR2</term>

                                <listitem><para>When this signal is
                                received the systemd manager will log
                                its complete state in human readable
                                form. The data logged is the same as
                                printed by <command>systemctl
                                dump</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGHUP</term>

                                <listitem><para>Reloads the complete
                                daemon configuration. This is mostly
                                equivalent to <command>systemctl
                                daemon-reload</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGRTMIN+0</term>

                                <listitem><para>Enters default mode, starts the
                                <filename>default.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl start
                                default.target</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGRTMIN+1</term>

                                <listitem><para>Enters rescue mode,
                                starts the
                                <filename>rescue.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl isolate
                                rescue.target</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGRTMIN+2</term>

                                <listitem><para>Enters emergency mode,
                                starts the
                                <filename>emergency.service</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl isolate
                                emergency.service</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGRTMIN+3</term>

                                <listitem><para>Halts the machine,
                                starts the
                                <filename>halt.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl start
                                halt.target</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGRTMIN+4</term>

                                <listitem><para>Powers off the machine,
                                starts the
                                <filename>poweroff.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl start
                                poweroff.target</command>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term>SIGRTMIN+5</term>

                                <listitem><para>Reboots the machine,
                                starts the
                                <filename>reboot.target</filename>
                                unit. This is mostly equivalent to
                                <command>systemctl start
                                reboot.target</command>.</para></listitem>
                        </varlistentry>
                </variablelist>
        </refsect1>

        <refsect1>
                <title>Environment</title>

                <variablelist>
                        <varlistentry>
                                <term><varname>$SYSTEMD_LOG_LEVEL</varname></term>
                                <listitem><para>systemd reads the
                                log level from this environment
                                variable. This can be overridden with
                                <option>--log-level=</option>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$SYSTEMD_LOG_TARGET</varname></term>
                                <listitem><para>systemd reads the
                                log target from this environment
                                variable. This can be overridden with
                                <option>--log-target=</option>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$SYSTEMD_LOG_COLOR</varname></term>
                                <listitem><para>Controls whether
                                systemd highlights important log
                                messages. This can be overridden with
                                <option>--log-color=</option>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$SYSTEMD_LOG_LOCATION</varname></term>
                                <listitem><para>Controls whether
                                systemd prints the code location along
                                with log messages. This can be
                                overridden with
                                <option>--log-location=</option>.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$XDG_CONFIG_HOME</varname></term>
                                <term><varname>$XDG_CONFIG_DIRS</varname></term>
                                <term><varname>$XDG_DATA_HOME</varname></term>
                                <term><varname>$XDG_DATA_DIRS</varname></term>

                                <listitem><para>The systemd session
                                manager uses these variables in
                                accordance to the <ulink
                                url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
                                Base Directory specification</ulink>
                                to find its configuration.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$SYSTEMD_UNIT_PATH</varname></term>

                                <listitem><para>Controls where systemd
                                looks for unit
                                files.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$SYSTEMD_SYSVINIT_PATH</varname></term>

                                <listitem><para>Controls where systemd
                                looks for SysV init scripts.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$SYSTEMD_SYSVRCND_PATH</varname></term>

                                <listitem><para>Controls where systemd
                                looks for SysV init script runlevel link
                                farms.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$LISTEN_PID</varname></term>
                                <term><varname>$LISTEN_FDS</varname></term>

                                <listitem><para>Set by systemd for
                                supervised processes during
                                socket-based activation. See
                                <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                                for more information.
                                </para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><varname>$NOTIFY_SOCKET</varname></term>

                                <listitem><para>Set by systemd for
                                supervised processes for status and
                                start-up completion notification. See
                                <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                                for more information.
                                </para></listitem>
                        </varlistentry>
                </variablelist>
        </refsect1>

        <refsect1>
                <title>Sockets and FIFOs</title>

                <variablelist>
                        <varlistentry>
                                <term><filename>@/org/freedesktop/systemd1/notify</filename></term>

                                <listitem><para>Daemon status
                                notification socket. This is an AF_UNIX
                                datagram socket in the Linux abstract
                                namespace, and is used to implement
                                the daemon notification logic as
                                implemented by
                                <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>

                        </varlistentry>

                        <varlistentry>
                                <term><filename>@/org/freedesktop/systemd1/logger</filename></term>

                                <listitem><para>Used internally by the
                                <filename>systemd-logger.service</filename>
                                unit to connect STDOUT and/or STDERR
                                of spawned processes to
                                <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                                or the kernel log buffer. This is an
                                AF_UNIX stream socket in the Linux
                                abstract namespace.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><filename>@/org/freedesktop/systemd1/private</filename></term>

                                <listitem><para>Used internally as
                                communication channel between
                                <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                                and the systemd process. This is an
                                AF_UNIX stream socket in the Linux
                                abstract namespace. This interface is
                                private to systemd and should not be
                                used in external
                                projects.</para></listitem>
                        </varlistentry>

                        <varlistentry>
                                <term><filename>/dev/initctl</filename></term>

                                <listitem><para>Limited compatibility
                                support for the SysV client interface,
                                as implemented by the
                                <filename>systemd-initctl.service</filename>
                                unit. This is a named pipe in the file
                                system. This interface is obsolete and
                                should not be used in new
                                applications.</para></listitem>
                        </varlistentry>
                </variablelist>
        </refsect1>

        <refsect1>
                <title>See Also</title>
                <para>
                        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemadm</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemd-install</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                        <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                </para>
        </refsect1>

</refentry>