= SysVinit to Systemd Cheatsheet

'''

[IMPORTANT]
======

This page was automatically converted from https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet

It is probably

* Badly formatted
* Missing graphics and tables that do not convert 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/quick-docs

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
}}
....

======

'''


This is a document to help system administrators who need to understand
what commands in systemd replace their old workflow in sysvinit. If you
want general information on systemd, refer to systemd.

[[services]]
Services
~~~~~~~~

Note that all recent versions of systemctl assume the '.service' if left
off. So, 'systemctl start frobozz.service' is the same as 'systemctl
start frobozz'

[cols=",,",options="header",]
|=======================================================================
|Sysvinit Command |Systemd Command |Notes
|service frobozz start |systemctl start frobozz |Used to start a service
(not reboot persistent)

|service frobozz stop |systemctl stop frobozz |Used to stop a service
(not reboot persistent)

|service frobozz restart |systemctl restart frobozz |Used to stop and
then start a service

|service frobozz reload |systemctl reload frobozz |When supported,
reloads the config file without interrupting pending operations.

|service frobozz condrestart |systemctl condrestart frobozz |Restarts if
the service is already running.

|service frobozz status |systemctl status frobozz |Tells whether a
service is currently running.

|ls /etc/rc.d/init.d/ |systemctl (or) systemctl list-unit-files
--type=service (or) +
ls /lib/systemd/system/*.service /etc/systemd/system/*.service |Used to
list the services that can be started or stopped +
Used to list all the services and other units

|chkconfig frobozz on |systemctl enable frobozz |Turn the service on,
for start at next boot, or other trigger.

|chkconfig frobozz off |systemctl disable frobozz |Turn the service off
for the next reboot, or any other trigger.

|chkconfig frobozz |systemctl is-enabled frobozz |Used to check whether
a service is configured to start or not in the current environment.

|chkconfig --list |systemctl list-unit-files --type=service (or) ls
/etc/systemd/system/*.wants/ |Print a table of services that lists which
runlevels each is configured on or off

|chkconfig --list | grep 5:on |systemctl list-dependencies
graphical.target |Print a table of services that will be started when
booting into graphical mode

|chkconfig frobozz --list |ls
/etc/systemd/system/*.wants/frobozz.service |Used to list what levels
this service is configured on or off

|chkconfig frobozz --add |systemctl daemon-reload |Used when you create
a new service file or modify any configuration
|=======================================================================

Note that all /sbin/service and /sbin/chkconfig lines listed above
continue to work on systemd, and will be translated to native
equivalents as necessary. The only exception is chkconfig --list.

[[runlevelstargets]]
Runlevels/targets
~~~~~~~~~~~~~~~~~

Systemd has a concept of _targets_ which serve a similar purpose as
runlevels but act a little different. Each _target_ is named instead of
numbered and is intended to serve a specific purpose. Some _targets_ are
implemented by inheriting all of the services of another _target_ and
adding additional services to it. There are systemd __target__s that
mimic the common sysvinit runlevels so you can still switch __target__s
using the familiar `telinit RUNLEVEL` command. The runlevels that are
assigned a specific purpose on vanilla Fedora installs; 0, 1, 3, 5, and
6; have a 1:1 mapping with a specific systemd _target_. Unfortunately,
there's no good way to do the same for the user-defined runlevels like 2
and 4. If you make use of those it is suggested that you make a new
named systemd _target_ as `/etc/systemd/system/$YOURTARGET` that takes
one of the existing runlevels as a base (you can look at
`/lib/systemd/system/graphical.target` as an example), make a directory
`/etc/systemd/system/$YOURTARGET.wants`, and then symlink the additional
services that you want to enable into that directory. (The service unit
files that you symlink live in `/lib/systemd/system`).

[cols=",,",options="header",]
|=======================================================================
|Sysvinit Runlevel |Systemd Target |Notes
|0 |runlevel0.target, poweroff.target |Halt the system.

|1, s, single |runlevel1.target, rescue.target |Single user mode.

|2, 4 |runlevel2.target, runlevel4.target, multi-user.target
|User-defined/Site-specific runlevels. By default, identical to 3.

|3 |runlevel3.target, multi-user.target |Multi-user, non-graphical.
Users can usually login via multiple consoles or via the network.

|5 |runlevel5.target, graphical.target |Multi-user, graphical. Usually
has all the services of runlevel 3 plus a graphical login.

|6 |runlevel6.target, reboot.target |Reboot

|emergency |emergency.target |Emergency shell
|=======================================================================

Changing runlevels:

[cols=",,",options="header",]
|=======================================================================
|Sysvinit Command |Systemd Command |Notes
|telinit 3 |systemctl isolate multi-user.target (OR systemctl isolate
runlevel3.target OR telinit 3) |Change to multi-user run level.

|sed s/^id:.*:initdefault:/id:3:initdefault:/ |ln -sf
/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
|Set to use multi-user runlevel on next reboot.
|=======================================================================

Kernel Options:

The above systemd targets can be used when booting. At the GRUB menu,
edit the selection to add "systemd.unit=__target__" (without the
double-quotation marks) as a kernel option where _target_ is one of the
above. (For example, "rescue.target".)

Tip: the ".target" extention is optional. The "systemd.unit=rescue"
kernel option works the same as "systemd.unit=rescue.target".
'''

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/quick-docs.
