Systemd is a system and service manager for Linux operating
systems. It is designed to be backwards compatible with SysV init scripts, and provides
a number of features such as parallel startup of system services at boot time,
on-demand activation of daemons, support for system state snapshots, or
dependency-based service control logic. In Red Hat Enterprise Linux 7, systemd
replaces Upstart as the default init system.
Systemd Unit Locations
Directory Description
/usr/lib/systemd/system/ Systemd
units distributed with installed RPM packages.
/run/systemd/system/ Systemd units created at run
time. This directory takes precedence over the directory with installed service
units.
/etc/systemd/system/ Systemd units created and
managed by the system administrator. This directory takes precedence over the
directory with runtime units.
MANAGING SYSTEM SERVICES
Previous versions of Red Hat Enterprise Linux, which were
distributed with SysV init or Upstart, used init scripts located in the
/etc/rc.d/init.d/ directory. These init scripts were typically written in Bash,
and allowed the system administrator to control the state of services and
daemons in their system. In Red Hat Enterprise Linux 7, these init scripts have
been replaced with service units.
Service units end with the .service file extension and serve
a similar purpose as init scripts. To view, start, stop, restart, enable, or
disable system services, use the systemctl command as described in Table 21.2.1
“Comparison of the service Utility with systemctl ”, Table 21.2.2 “Comparison
of the chkconfig Utility with systemctl”, and in the section below. The service
and chkconfig commands are still available in the system and work as expected,
but are only included for compatibility reasons and should be avoided.
Comparison of the service
Utility with systemctl
service
|
systemctl
|
Description
|
service name start
|
systemctl start name.service
|
Starts a service.
|
service name stop
|
systemctl stop name.service
|
Stops a service.
|
service name restart
|
systemctl restart name.service
|
Restarts a service.
|
service name condrestart
|
systemctl try-restart name.service
|
Restarts a service only if it is
running.
|
service name reload
|
systemctl reload name.service
|
Reloads configuration.
|
service name status
|
systemctl status name.service
systemctl is-active name.service
|
Checks if a service is running.
|
service --status-all
|
systemctl list-units --type service --all
|
Displays the status of all
services.
|
Comparison of the chkconfig
Utility with systemctl
chkconfig
|
systemctl
|
Description
|
chkconfig name on
|
systemctl enable name.service
|
Enables a service.
|
chkconfig name off
|
systemctl disable name.service
|
Disables a service.
|
chkconfig --list name
|
systemctl status name.service
systemctl is-enabled name.service
|
Checks if a service is enabled.
|
chkconfig --list
|
systemctl list-unit-files --type service
|
Lists all services and checks if
they are enabled.
|
chkconfig --list
|
systemctl list-dependencies --after
|
Lists services that are ordered to
start before the specified unit.
|
chkconfig --list
|
systemctl list-dependencies --before
|
Lists services that are ordered to
start after the specified unit.
|
Starting a Service
To start a service unit that corresponds to a system
service, type the following at a shell prompt as root:
systemctl start name.service
Replace name with the name of the service unit you want to
start (for example, gdm). This command starts the selected service unit in the
current session.
Example Starting a Service
The service unit for the Apache HTTP Server is named
httpd.service. To activate this service unit and start the httpd daemon in the
current session, run the following command as root:
~]# systemctl start httpd.service
Stopping a Service
To stop a service unit that corresponds to a system service,
type the following at a shell prompt as root:
systemctl stop name.service
Replace name with the name of the service unit you want to
stop (for example, bluetooth). This command stops the selected service unit in
the current session.
Example Stopping a Service
The service unit for the bluetoothd daemon is named
bluetooth.service. To deactivate this service unit and stop the bluetoothd
daemon in the current session, run the following command as root:
~]# systemctl stop bluetooth.service
Restarting a Service
To restart a service unit that corresponds to a system
service, type the following at a shell prompt as root:
systemctl restart name.service
Replace name with the name of the service unit you want to
restart (for example, httpd). This command stops the selected service unit in
the current session and immediately starts it again. Importantly, if the
selected service unit is not running, this command starts it too. To tell
systemd to restart a service unit only if the corresponding service is already
running, run the following command as root:
systemctl try-restart name.service
Certain system services also allow you to reload their
configuration without interrupting their execution. To do so, type as root:
systemctl reload name.service
Note that system services that do not support this feature
ignore this command altogether. For convenience, the systemctl command also
supports the reload-or-restart and reload-or-try-restart commands that restart
such services instead.
Example Restarting a Service
In order to prevent users from encountering unnecessary
error messages or partially rendered web pages, the Apache HTTP Server allows
you to edit and reload its configuration without the need to restart it and
interrupt actively processed requests. To do so, type the following at a shell
prompt as root:
~]# systemctl reload httpd.service
Enabling a Service
To configure a service unit that corresponds to a system
service to be automatically started at boot time, type the following at a shell
prompt as root:
systemctl enable name.service
Replace name with the name of the service unit you want to
enable (for example, httpd). This command reads the [Install] section of the selected
service unit and creates appropriate symbolic links to the
/usr/lib/systemd/system/name.service file in the /etc/systemd/system/ directory
and its subdirectories. This command does not, however, rewrite links that
already exist. If you want to ensure that the symbolic links are re-created,
use the following command as root:
systemctl reenable name.service
This command disables the selected service unit and
immediately enables it again.
Example Enabling a Service
To configure the Apache HTTP Server to start automatically
at boot time, run the following command as root:
~]# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service'
'/etc/systemd/system/multi-user.target.wants/httpd.service'
Disabling a Service
To prevent a service unit that corresponds to a system
service from being automatically started at boot time, type the following at a
shell prompt as root:
systemctl disable name.service
Replace name with the name of the service unit you want to
disable (for example, bluetooth). This command reads the [Install] section of
the selected service unit and removes appropriate symbolic links to the
/usr/lib/systemd/system/name.service file from the /etc/systemd/system/
directory and its subdirectories. In addition, you can mask any service unit to
prevent it from being started manually or by another service. To do so, run the
following command as root:
systemctl mask name.service
This command replaces the /etc/systemd/system/name.service
file with a symbolic link to /dev/null, rendering the actual unit file
inaccessible to systemd. To revert this action and unmask a service unit, type
as root:
systemctl unmask name.service
Example Disabling a Service
To prevent this service unit from starting at boot time,
type the following at a shell prompt as root:
~]# systemctl disable bluetooth.service
rm '/etc/systemd/system/dbus-org.bluez.service'
rm
'/etc/systemd/system/bluetooth.target.wants/bluetooth.service'