From Fedora Project Wiki

No edit summary
No edit summary
(64 intermediate revisions by 17 users not shown)
Line 1: Line 1:
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.
{{autolang|base=yes}}


== What is the status of systemd in Fedora? ==
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


Fedora 14 featured it is a technology preview. It is the default in Fedora 15 and has replaced Upstart.
{{admon/note|For system administrators|
System administrators can visit [[SysVinit_to_Systemd_Cheatsheet| this page]], to understand how to use the native <code>systemctl</code> calls that replace their old workflow in SysVinit. Note that the <code>service</code> and <code>chkconfig</code> commands will continue to work as expected in the '''systemd''' world.}}


== Has all legacy System V init files been converted to systemd service files or equivalent? ==
== Why systemd? ==


Many of the core services have been converted but not all of them yet. The transition will happen over several releases. systemd is fully compatible with the legacy init scripts  
http://0pointer.de/blog/projects/why.html
 
== systemd documentation ==
 
systemd has very comprehensive documentation.  Refer to
 
http://0pointer.de/blog/projects/systemd-docs.html
 
== Tools ==
 
* <code>systemctl</code>: used to introspect and control the state of the systemd system and service manager
* <code>systemd-cgls</code>: recursively shows the contents of the selected Linux control group hierarchy in a tree
* <code>systemadm</code>: a graphical frontend for the systemd system and service manager that allows introspection and control of systemd.  Part of the systemd-gtk package.  This is an early version and needs more work.  Do not use it for now unless you are a developer. 
 
View the man pages for more details.
 
== 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 <code>systemd.unit=</code> command line option. This may be used to temporarily boot into a different boot unit. The classical run-levels are replaced as following:
 
<code>systemd.unit=rescue.target</code> is a special target unit for setting up the base system and a rescue shell (similar to run level 1); <code>systemd.unit=emergency.target</code>, is very similar to passing <code>init=/bin/sh</code> but with the option to boot the full system from there; <code>systemd.unit=multi-user.target</code> for setting up a non-graphical multi-user system; <code>systemd.unit=graphical.target</code> for setting up a graphical login screen.
 
For details about these special systemd boot units, view the man <code>systemd.special</code> page.
it scripts  


== What is the tool to manage services with systemd? ==
== What is the tool to manage services with systemd? ==
Line 13: Line 39:
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.   
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.   


systemctl  -  list all running services etc
list all running services etc:
 
<pre> systemctl </pre>  
 
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 start/stop or enable/disable services? ==
 
Activates a service immediately:
 
<pre>  systemctl start foo </pre>   
 
Deactivates a service immediately:
 
<pre>  systemctl stop foo </pre> 
 
Restarts a service:
 
<pre> systemctl restart foo </pre>
 
Shows status of a service including whether it is running or not:
 
<pre> systemctl status foo </pre> 
 
Enables a service to be started on bootup:
 
<pre> systemctl enable foo </pre>


systemctl disable foo.service  - Disables a service to not start during bootup
Disables a service to not start during bootup:
systemctl enable foo.serice    - Enables a service to be started on bootup


systemctl start foo.service    - Activates a service immediately
<pre> systemctl disable foo </pre>
systemctl stop foo.service    - Deactivates a service immediately
systemctl restart foo.service  - Restarts a service
systemctl status foo.service  - Shows status of a service including whether it is running or not


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.  
Prevent a service from starting dynamically or even manually unless unmasked:
 
<pre> systemctl mask foo </pre>
 
Check whether a service is already enabled or not:
 
<pre> systemctl is-enabled foo</pre>
 
Refer to man systemctl for more details.


== How do I change the runlevel? ==
== How do I change the target (runlevel) ? ==


systemd has the concept of targets which is a more flexible replacement for runlevels in sysvinit.   
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
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  
You can switch to 'runlevel 3' by running  


<pre> systemctl isolate multi-user.target (or) systemctl isolate runlevel3.target </pre>  
<pre> systemctl isolate multi-user.target </pre>  


You can switch to 'runlevel 5' by running  
You can switch to 'runlevel 5' by running  


<pre> systemctl isolate graphical.target (or) systemctl isolate runlevel5.target </pre>
<pre> systemctl isolate graphical.target </pre>


== How do I change the default runlevel? ==
== How do I change the default target? ==


Switch to runlevel 3 by default
<pre> systemctl set-default <name of target>.target </pre>


<pre> ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target </pre>
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


Switch to runlevel 5 by default
systemd does not use /etc/inittab file.


<pre> ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target </pre>
== How do I know the current target? ==


systemd does not use /etc/inittab file.
<pre> systemctl get-default </pre>
 
== How to power off the machine ? ==
 
You can use


How do I know the current run level?
<pre> poweroff </pre>


runlevel command still works with systemd.  You can continue using that however runlevels is a legacy concept in systemd and is emulated via 'targets' and multiple targets can be active at the same time. So the equivalent in systemd terms is
Some more possibilities are: <code>halt -p</code>, <code>init 0</code>, <code>shutdown -P now</code>


<pre> systemctl list-units --type=target </pre>
Note that <code>halt</code> used to work the same as <code>poweroff</code> in previous Fedora releases, but systemd distinguishes between the two, so <code>halt</code> 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 commaands does the same thing
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


<pre> service NetworkManager stop </pre>
 
<pre> systemctl stop NetworkManager </pre>


(or)
(or)


<pre> systemctl stop NetworkManager.service </pre>
<pre> service NetworkManager stop </pre>


== Does chkconfig command work with systemd? ==
== Does chkconfig command work with systemd? ==


chkconfig has not been modified to call systemctl yet however that is the plan.  systemctl however automatically calls chkconfig when dealing with a traditional sysv init file
Yes,  for turning on/off services,  compatibility has been provided both ways.  chkconfig has been modified to call systemctl when dealing with systemd service filesAlso systemctl automatically calls chkconfig when dealing with a traditional sysv init file
 
So either of the following commands does the same thing
 
<pre> systemctl disable NetworkManager </pre>
 
(or)
 
<pre> chkconfig NetworkManager off </pre>
 
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? ==


system-config-services does not understand systemd service files yet. It needs to be updated or replaced
Yes. It does.
 
== 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]):


How do I change the number of gettys running by default ?
<pre>
[Login]
...
NAutoVTs=8
</pre>
 
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:
To add another getty:
<pre>
systemctl enable getty@tty8
systemctl start getty@tty8
</pre>
To remove a getty:
<pre>
systemctl disable getty@tty8
systemctl stop getty@tty8
</pre>
systemd does not use /etc/inittab file.
== How do I set automatic login on a virtual console terminal? ==
First create a new service similar to getty@.service:
<pre>
# 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
</pre>
then edit ExecStart, Restart and Alias values, like this:


Simply place another symlink for instantiating another getty in the getty.target.wants/ directory:
<pre>
...
ExecStart=-/sbin/mingetty --autologin USERNAME %I
Restart=no
...
Alias=getty.target.wants/getty@tty8.service
</pre>


and finally reload daemon and start the service:
<pre>
<pre>
ln -sf /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service
systemctl daemon-reload
systemctl daemon-reload
systemctl start getty@tty9.service
systemctl start getty@tty8.service
</pre>
</pre>


To remove a getty:
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? ==
 
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
 
<pre>
[Service]
Restart=always
RestartSec=30
</pre>
 
Refer to man [http://www.freedesktop.org/software/systemd/man/systemd.unit.html systemd.unit] page for more details.
 
{{admon/tip| Don't forget to reload systemd daemon using <code>systemctl daemon-reload</code> and <code> systemctl restart foobar</code> after editing a unit file where foobar is the name of the unit.  Also note that you can <code> systemd-delta </code> to list the unit files which have been customized and also the precise differences }}


Simply remove the getty symlinks you want to get rid of in the getty.target.wants/ directory:
Special care must be taken when overriding options which can be set muliple times (<code>ExecStart</code>, <code>ExecStartPre</code>, <code>ExecStartPost</code> 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:
<pre>
<pre>
rm /etc/systemd/system/getty.target.wants/getty@tty5.service /etc/systemd/system/getty.target.wants/getty@tty6.service
[Service]
systemctl daemon-reload
ExecStart=/bin/echo execstart1
systemctl stop getty@tty5.service getty@tty6.service
ExecStart=
ExecStart=/bin/echo execstart2
ExecStartPost=/bin/echo post1
ExecStartPost=/bin/echo post2
</pre>
When started, this service will print
<pre>
execstart2
post1
post2
</pre>
</pre>


systemd does not use /etc/inittab file.
The same rules apply to snippets in <code>.d</code> directories. This means that snippets which override
<code>ExecStart</code> and similar settings, often should start with the empty assignment <code>ExecStart=</code>, followed by the new setting.
 
== How do I debug systemd issues? ==
 
Refer to [[How_to_debug_Systemd_problems]]
 
= 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 =h
= 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/FrequentlyAskedQuestions
* http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks
* http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks
* [[Features/systemd | Features Fedora 15:systemd]]
* [http://fosdem.org/2011/interview/lennart-poettering.html Interview with the developer]

Revision as of 03:29, 29 September 2014

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

Note.png
For system administrators
System administrators can visit this page, to understand how to use the native systemctl calls that replace their old workflow in SysVinit. Note that the service and chkconfig commands will continue to work as expected in the systemd world.

Why systemd?

http://0pointer.de/blog/projects/why.html

systemd documentation

systemd has very comprehensive documentation. Refer to

http://0pointer.de/blog/projects/systemd-docs.html

Tools

  • systemctl: used to introspect and control the state of the systemd system and service manager
  • systemd-cgls: recursively shows the contents of the selected Linux control group hierarchy in a tree
  • systemadm: a graphical frontend for the systemd system and service manager that allows introspection and control of systemd. Part of the systemd-gtk package. This is an early version and needs more work. Do not use it for now unless you are a developer.

View the man pages for more details.

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?

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 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) ?

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?

 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?

 systemctl get-default 

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?

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?

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?

Yes. It does.

How do I change the number of gettys running by default?

The simplest way is to edit /etc/systemd/logind.conf (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?

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?

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 systemd.unit page for more details.

Idea.png
Don't forget to reload systemd daemon using systemctl daemon-reload and systemctl restart foobar after editing a unit file where foobar is the name of the unit. Also note that you can systemd-delta to list the unit files which have been customized and also the precise differences

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?

Refer to How_to_debug_Systemd_problems

Man pages

systemd comes with extensive documentation including several man pages.

On the web: list of all systemd man pages, index of all settings.

References