Skip to content

Instantly share code, notes, and snippets.

@mbodo
Last active March 15, 2024 18:25
Show Gist options
  • Star 35 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save mbodo/8f87c96ce11e91f80fbf6175412a2206 to your computer and use it in GitHub Desktop.
Save mbodo/8f87c96ce11e91f80fbf6175412a2206 to your computer and use it in GitHub Desktop.
Systemd cheatsheet

Linux - Systemd cheatsheet

systemctl

Activates a service immediately:

systemctl start foo.service

Deactivates a service immediately:

systemctl stop foo.service

Restarts a service:

systemctl restart foo.service

Shows status of a service including whether it is running or not:

systemctl status foo.service

Enables a service to be started on bootup:

systemctl enable foo.service

Disables a service to not start during bootup:

systemctl disable foo.service

Check whether a service is already enabled or not:

0 indicates that it is enabled. 1 indicates that it is disabled

systemctl is-enabled foo.service; echo $?

Change ad-hoc runlevel with systemctl isolate command:

Switch to another target (in this case multi-user/runlevel 3 in old SysV):

systemctl isolate multi-user.target

Switch to graphical target (in this case graphical/runlevel 5 in old SysV):

systemctl isolate graphical.target

Change permanently change default.target:

Remove configured default target

rm /etc/systemd/system/default.target

Create default.target as symbolic link to multi-user.target

ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

Set default target through systemctl

To find a [new target]:

- To get active targets, 
  systemctl --type=target list-units
- To get all targets, (active/inactive)
  systemctl --type=target --all list-units
- To list available targets, (ls -l /usr/lib/systemd/system/*.target)
  systemctl --type=target list-unit-files


systemctl set-default [new target]

List-units by pattern:

systemctl list-units *etwok*.service

Example content:
UNIT                   LOAD   ACTIVE SUB     DESCRIPTION
network.service        loaded active exited  LSB: Bring up/down networking
NetworkManager.service loaded active running Network Manager

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed. Pass --all to see loaded but inactive units, too.

Display a content of unit file

systemctl cat network.service

Displayed content:

# /run/systemd/generator.late/network.service
# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/network
Description=LSB: Bring up/down networking
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target network-online.target network.target
After=iptables.service ip6tables.service NetworkManager-wait-online.service NetworkManager.service
Wants=network-online.target
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/network start
ExecStop=/etc/rc.d/init.d/network stop
ExecReload=/etc/rc.d/init.d/network reload

Suppress non zero exit code (service after stop will be displayed as inactive, not failed):

[Service]
SuccessExitStatus=143

Link:

How to put PID of service as variable to service systemd file:

ExecReload=/bin/kill -s HUP $MAINPID

Link

List all services with pattern

<pattern> - httpd e.g

systemctl list-units -t service --full | grep <pattern> | sed 's/^\s*//g' | cut -d " " -f1 | while read s; do systemctl status $s; done

Link

List all enable units

systemctl list-unit-files | grep enabled

smartd.service                                enabled 
sshd.service                                  enabled 
sysstat.service                               enabled 
...

Link

Reference links:

Pid Eins:

Digital Ocean:

@avin
Copy link

avin commented Mar 2, 2018

It's easier to use systemctl set-default [new target] to setup default.target

@mbodo
Copy link
Author

mbodo commented Apr 14, 2018

Avin thank you. It goes straight to the cheatsheet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment