mirror of
https://pagure.io/fedora-docs/quick-docs.git
synced 2024-12-01 07:39:48 +00:00
424 lines
11 KiB
Text
424 lines
11 KiB
Text
|
= Systemd
|
|||
|
|
|||
|
'''
|
|||
|
|
|||
|
[NOTE]
|
|||
|
======
|
|||
|
|
|||
|
This page was automatically converted from https://fedoraproject.org/wiki/Systemd
|
|||
|
|
|||
|
It is probably
|
|||
|
|
|||
|
* Badly formatted
|
|||
|
* Missing graphics and tables that do not covert well from mediawiki
|
|||
|
* Out-of-date
|
|||
|
* In need of other love
|
|||
|
|
|||
|
Please fix it, remove this notice, and then add to `_topic_map.yml`
|
|||
|
|
|||
|
Pull requests accepted at https://pagure.io/fedora-docs/fedora-howto
|
|||
|
|
|||
|
Once that is live, go to the original wiki page and add an `{{old}}`
|
|||
|
tag, followed by a note like
|
|||
|
|
|||
|
....
|
|||
|
{{admon/note|This page has a new home!|
|
|||
|
This wiki page is no longer maintained. Please find the up-to-date
|
|||
|
version at: https://docs.fedoraproject.org/whatever-the-url
|
|||
|
}}
|
|||
|
....
|
|||
|
|
|||
|
======
|
|||
|
|
|||
|
'''
|
|||
|
|
|||
|
|
|||
|
systemd is a system and service manager for Linux, compatible with SysV
|
|||
|
and LSB init scripts. systemd provides aggressive parallelization
|
|||
|
capabilities, uses socket and D-Bus activation for starting services,
|
|||
|
offers on-demand starting of daemons, keeps track of processes using
|
|||
|
Linux cgroups, supports snapshotting and restoring of the system state,
|
|||
|
maintains mount and automount points and implements an elaborate
|
|||
|
transactional dependency-based service control logic. It can work as a
|
|||
|
drop-in replacement for sysvinit. For more information, watch the video
|
|||
|
at http://www.youtube.com/watch?v=TyMLi8QF6sw
|
|||
|
|
|||
|
[[why-systemd]]
|
|||
|
Why systemd?
|
|||
|
~~~~~~~~~~~~
|
|||
|
|
|||
|
http://0pointer.de/blog/projects/why.html
|
|||
|
|
|||
|
[[systemd-documentation]]
|
|||
|
systemd documentation
|
|||
|
~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
systemd has very comprehensive documentation. Refer to
|
|||
|
|
|||
|
http://0pointer.de/blog/projects/systemd-docs.html
|
|||
|
|
|||
|
[[boot-kernel-command-line]]
|
|||
|
Boot Kernel Command Line
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
On boot *systemd* activates (by default), the target unit
|
|||
|
_default.target_ whose job is to activate services and other units by
|
|||
|
pulling them in via dependencies.
|
|||
|
|
|||
|
To override the unit to activate, *systemd* parses its own kernel
|
|||
|
command line arguments via the `systemd.unit=` command line option. This
|
|||
|
may be used to temporarily boot into a different boot unit. The
|
|||
|
classical run-levels are replaced as following:
|
|||
|
|
|||
|
`systemd.unit=rescue.target` is a special target unit for setting up the
|
|||
|
base system and a rescue shell (similar to run level 1);
|
|||
|
`systemd.unit=emergency.target`, is very similar to passing
|
|||
|
`init=/bin/sh` but with the option to boot the full system from there;
|
|||
|
`systemd.unit=multi-user.target` for setting up a non-graphical
|
|||
|
multi-user system; `systemd.unit=graphical.target` for setting up a
|
|||
|
graphical login screen.
|
|||
|
|
|||
|
For details about these special systemd boot units, view the man
|
|||
|
`systemd.special` page. it scripts
|
|||
|
|
|||
|
[[what-is-the-tool-to-manage-services-with-systemd]]
|
|||
|
What is the tool to manage services with systemd?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
systemctl is the primary tool to use. It combines the functionality of
|
|||
|
both service and chkconfig into a single tool that you can use for
|
|||
|
instance to enable/disable services permanently or only for the current
|
|||
|
session.
|
|||
|
|
|||
|
list all running services etc:
|
|||
|
|
|||
|
....
|
|||
|
systemctl
|
|||
|
....
|
|||
|
|
|||
|
Refer to man systemctl for more details. systemd-cgls lists the running
|
|||
|
process in a tree format. It can recursively show the content of any
|
|||
|
given control group. Refer to man systemd-cgls for more details.
|
|||
|
|
|||
|
[[how-do-i-startstop-or-enabledisable-services]]
|
|||
|
How do I start/stop or enable/disable services?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Activates a service immediately:
|
|||
|
|
|||
|
....
|
|||
|
systemctl start foo
|
|||
|
....
|
|||
|
|
|||
|
Deactivates a service immediately:
|
|||
|
|
|||
|
....
|
|||
|
systemctl stop foo
|
|||
|
....
|
|||
|
|
|||
|
Restarts a service:
|
|||
|
|
|||
|
....
|
|||
|
systemctl restart foo
|
|||
|
....
|
|||
|
|
|||
|
Shows status of a service including whether it is running or not:
|
|||
|
|
|||
|
....
|
|||
|
systemctl status foo
|
|||
|
....
|
|||
|
|
|||
|
Enables a service to be started on bootup:
|
|||
|
|
|||
|
....
|
|||
|
systemctl enable foo
|
|||
|
....
|
|||
|
|
|||
|
Disables a service to not start during bootup:
|
|||
|
|
|||
|
....
|
|||
|
systemctl disable foo
|
|||
|
....
|
|||
|
|
|||
|
Prevent a service from starting dynamically or even manually unless
|
|||
|
unmasked:
|
|||
|
|
|||
|
....
|
|||
|
systemctl mask foo
|
|||
|
....
|
|||
|
|
|||
|
Check whether a service is already enabled or not:
|
|||
|
|
|||
|
....
|
|||
|
systemctl is-enabled foo
|
|||
|
....
|
|||
|
|
|||
|
Refer to man systemctl for more details.
|
|||
|
|
|||
|
[[how-do-i-change-the-target-runlevel]]
|
|||
|
How do I change the target (runlevel)?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
systemd has the concept of targets which is a more flexible replacement
|
|||
|
for runlevels in sysvinit.
|
|||
|
|
|||
|
Run level 3 is emulated by multi-user.target. Run level 5 is emulated by
|
|||
|
graphical.target. runlevel3.target is a symbolic link to
|
|||
|
multi-user.target and runlevel5.target is a symbolic link to
|
|||
|
graphical.target.
|
|||
|
|
|||
|
You can switch to 'runlevel 3' by running
|
|||
|
|
|||
|
....
|
|||
|
systemctl isolate multi-user.target
|
|||
|
....
|
|||
|
|
|||
|
You can switch to 'runlevel 5' by running
|
|||
|
|
|||
|
....
|
|||
|
systemctl isolate graphical.target
|
|||
|
....
|
|||
|
|
|||
|
[[how-do-i-change-the-default-target]]
|
|||
|
How do I change the default target?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
....
|
|||
|
systemctl set-default <name of target>.target
|
|||
|
....
|
|||
|
|
|||
|
graphical.target is the default. You might want multi-user.target for
|
|||
|
the equivalent of non graphical (runlevel 3) from sysv init. The full
|
|||
|
list of targets can be accessed via systemctl list-units --type=target
|
|||
|
|
|||
|
systemd does not use /etc/inittab file.
|
|||
|
|
|||
|
[[how-do-i-know-the-current-target]]
|
|||
|
How do I know the current target?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
....
|
|||
|
systemctl get-default
|
|||
|
....
|
|||
|
|
|||
|
[[how-to-power-off-the-machine]]
|
|||
|
How to power off the machine?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
You can use
|
|||
|
|
|||
|
....
|
|||
|
poweroff
|
|||
|
....
|
|||
|
|
|||
|
Some more possibilities are: `halt -p`, `init 0`, `shutdown -P now`
|
|||
|
|
|||
|
Note that `halt` used to work the same as `poweroff` in previous Fedora
|
|||
|
releases, but systemd distinguishes between the two, so `halt` without
|
|||
|
parameters now does exactly what it says - it merely stops the system
|
|||
|
without turning it off.
|
|||
|
|
|||
|
[[does-service-command-work-with-systemd]]
|
|||
|
Does service command work with systemd?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Yes. It has been modified to call systemctl automatically when dealing
|
|||
|
with systemd service files. So either of the following commands does the
|
|||
|
same thing
|
|||
|
|
|||
|
....
|
|||
|
systemctl stop NetworkManager
|
|||
|
....
|
|||
|
|
|||
|
(or)
|
|||
|
|
|||
|
....
|
|||
|
service NetworkManager stop
|
|||
|
....
|
|||
|
|
|||
|
[[does-chkconfig-command-work-with-systemd]]
|
|||
|
Does chkconfig command work with systemd?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Yes, for turning on/off services, compatibility has been provided both
|
|||
|
ways. chkconfig has been modified to call systemctl when dealing with
|
|||
|
systemd service files. Also systemctl automatically calls chkconfig when
|
|||
|
dealing with a traditional sysv init file.
|
|||
|
|
|||
|
So either of the following commands does the same thing
|
|||
|
|
|||
|
....
|
|||
|
systemctl disable NetworkManager
|
|||
|
....
|
|||
|
|
|||
|
(or)
|
|||
|
|
|||
|
....
|
|||
|
chkconfig NetworkManager off
|
|||
|
....
|
|||
|
|
|||
|
chkconfig --list doesn't list systemd services, only Sys V services. The
|
|||
|
output of chkconfig takes note of this, along with supplying additional
|
|||
|
information.
|
|||
|
|
|||
|
[[does-system-config-services-work-with-systemd]]
|
|||
|
Does system-config-services work with systemd?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Yes. It does.
|
|||
|
|
|||
|
[[how-do-i-change-the-number-of-gettys-running-by-default]]
|
|||
|
How do I change the number of gettys running by default?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
The simplest way is to edit /etc/systemd/logind.conf
|
|||
|
([http://www.freedesktop.org/software/systemd/man/logind.conf.html#NAutoVTs=
|
|||
|
man page]):
|
|||
|
|
|||
|
....
|
|||
|
[Login]
|
|||
|
...
|
|||
|
NAutoVTs=8
|
|||
|
....
|
|||
|
|
|||
|
This setting will take effect after reboot.
|
|||
|
|
|||
|
Alternatively, getty@.services which open the login prompt can be
|
|||
|
enabled and started individually.
|
|||
|
|
|||
|
To add another getty:
|
|||
|
|
|||
|
....
|
|||
|
systemctl enable getty@tty8
|
|||
|
systemctl start getty@tty8
|
|||
|
....
|
|||
|
|
|||
|
To remove a getty:
|
|||
|
|
|||
|
....
|
|||
|
systemctl disable getty@tty8
|
|||
|
systemctl stop getty@tty8
|
|||
|
....
|
|||
|
|
|||
|
systemd does not use /etc/inittab file.
|
|||
|
|
|||
|
[[how-do-i-set-automatic-login-on-a-virtual-console-terminal]]
|
|||
|
How do I set automatic login on a virtual console terminal?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
First create a new service similar to getty@.service:
|
|||
|
|
|||
|
....
|
|||
|
# cp /lib/systemd/system/getty@.service \
|
|||
|
/etc/systemd/system/autologin@.service
|
|||
|
# ln -s /etc/systemd/system/autologin@.service \
|
|||
|
/etc/systemd/system/getty.target.wants/getty@tty8.service
|
|||
|
....
|
|||
|
|
|||
|
then edit ExecStart, Restart and Alias values, like this:
|
|||
|
|
|||
|
....
|
|||
|
...
|
|||
|
ExecStart=-/sbin/mingetty --autologin USERNAME %I
|
|||
|
Restart=no
|
|||
|
...
|
|||
|
Alias=getty.target.wants/getty@tty8.service
|
|||
|
....
|
|||
|
|
|||
|
and finally reload daemon and start the service:
|
|||
|
|
|||
|
....
|
|||
|
systemctl daemon-reload
|
|||
|
systemctl start getty@tty8.service
|
|||
|
....
|
|||
|
|
|||
|
Note that if you exit tty8 session, you wont be able to use it until
|
|||
|
next reboot or manual start by systemctl, except if you leave Restart as
|
|||
|
‘always’, but I highly recommend to avoid this according to security
|
|||
|
reasons.
|
|||
|
|
|||
|
[[how-do-i-customize-a-unit-file-add-a-custom-unit-file]]
|
|||
|
How do I customize a unit file/ add a custom unit file?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
The best way to customize unit files is to add
|
|||
|
/etc/systemd/system/foobar.service.d/*.conf where foobar.service is the
|
|||
|
name of the service you want to customize. If a directory doesn't
|
|||
|
already exist, create one and drop a conf file with the settings you
|
|||
|
want to override. For example,
|
|||
|
|
|||
|
/etc/systemd/system/httpd.service.d/restart.conf
|
|||
|
|
|||
|
....
|
|||
|
[Service]
|
|||
|
Restart=always
|
|||
|
RestartSec=30
|
|||
|
....
|
|||
|
|
|||
|
Refer to man
|
|||
|
http://www.freedesktop.org/software/systemd/man/systemd.unit.html[systemd.unit]
|
|||
|
page for more details.
|
|||
|
|
|||
|
Special care must be taken when overriding options which can be set
|
|||
|
muliple times (`ExecStart`, `ExecStartPre`, `ExecStartPost` are a common
|
|||
|
example). Assigning some value to the option _appends_ to the existing
|
|||
|
list, while assiging the _empty_ value _resets_ the list.
|
|||
|
|
|||
|
For example, let's say we have a service file like this:
|
|||
|
|
|||
|
....
|
|||
|
[Service]
|
|||
|
ExecStart=/bin/echo execstart1
|
|||
|
ExecStart=
|
|||
|
ExecStart=/bin/echo execstart2
|
|||
|
ExecStartPost=/bin/echo post1
|
|||
|
ExecStartPost=/bin/echo post2
|
|||
|
....
|
|||
|
|
|||
|
When started, this service will print
|
|||
|
|
|||
|
....
|
|||
|
execstart2
|
|||
|
post1
|
|||
|
post2
|
|||
|
....
|
|||
|
|
|||
|
The same rules apply to snippets in `.d` directories. This means that
|
|||
|
snippets which override `ExecStart` and similar settings, often should
|
|||
|
start with the empty assignment `ExecStart=`, followed by the new
|
|||
|
setting.
|
|||
|
|
|||
|
[[how-do-i-debug-systemd-issues]]
|
|||
|
How do I debug systemd issues?
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Refer to How_to_debug_Systemd_problems
|
|||
|
|
|||
|
[[man-pages]]
|
|||
|
Man pages
|
|||
|
---------
|
|||
|
|
|||
|
systemd comes with extensive documentation including several man pages.
|
|||
|
|
|||
|
On the web: http://www.freedesktop.org/software/systemd/man/[list of all
|
|||
|
systemd man pages],
|
|||
|
http://www.freedesktop.org/software/systemd/man/systemd.directives.html[index
|
|||
|
of all settings].
|
|||
|
|
|||
|
[[references]]
|
|||
|
References
|
|||
|
----------
|
|||
|
|
|||
|
* http://www.freedesktop.org/wiki/Software/systemd[Project homepage]
|
|||
|
* http://0pointer.de/blog/projects/ - Lennart's blog has lots of
|
|||
|
information about systemd. Lennart is the primary systemd developer
|
|||
|
* http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions
|
|||
|
* http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks
|
|||
|
* link:Features/systemd[ Features Fedora 15:systemd]
|
|||
|
* http://fosdem.org/2011/interview/lennart-poettering.html[Interview
|
|||
|
with the developer]
|
|||
|
'''
|
|||
|
|
|||
|
See a typo, something missing or out of date, or anything else which can be
|
|||
|
improved? Edit this document at https://pagure.io/fedora-docs/fedora-howto.
|