Linux System Administration for Beginners

Operation of Running Systems

Manage the startup process and services In Services Configuration

In this guide, you’ll learn how to inspect, configure, and control services on a Linux system using systemd—the modern init system. We cover unit files, service management commands, and best practices for maintaining your server’s services.


Table of Contents

  1. Introduction to systemd
  2. Unit File Types
  3. Service Unit Structure
  4. Inspecting the SSH Daemon Service
  5. Editing and Reverting a Unit
  6. Monitoring Service Status
  7. Managing Service Lifecycle
  8. Enabling and Disabling at Boot
  9. Masking and Unmasking Services
  10. Listing All Service Units
  11. Further Reading

Introduction to systemd

When Linux boots, systemd orchestrates service startup in parallel while respecting dependencies. If a critical service fails, systemd can restart it automatically, ensuring high availability. All behavior is defined by unit files—plain-text configurations that tell systemd how to manage resources.

Note

Learn more about systemd on the Official Freedesktop Wiki.


Unit File Types

Unit files end in .service, .socket, .device, .timer, and more. Here’s a quick overview:

Unit TypeDescription
serviceDefines how to start, stop, and manage a service
socketConfigures socket activation
targetGroups units and handles synchronization
timerSchedules tasks similar to cron

Service Unit Structure

Service units reside in /etc/systemd/system/ or /usr/lib/systemd/system/. They have three main sections:

[Unit]
Description=Human-readable description
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/myapp
Restart=on-failure

[Install]
WantedBy=multi-user.target

Key directives:

  • ExecStart: Command to launch the service
  • ExecReload: How to reload without a full restart
  • Restart: Policy (no, on-failure, always)

Consult the manual for all options:

man systemd.service

Inspecting the SSH Daemon Service

Most servers run the OpenSSH daemon (sshd) as a systemd service. View its complete unit file:

$ systemctl cat sshd.service
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target

[Service]
Type=notify
EnvironmentFile=/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

Editing and Reverting a Unit

To fully edit the sshd.service file:

$ sudo systemctl edit --full sshd.service

To discard changes and restore the vendor-provided unit:

$ sudo systemctl revert sshd.service

Monitoring Service Status

Check detailed status and recent logs:

$ sudo systemctl status sshd.service

Sample output:

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-12-08 16:48:53 CST; 15min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1031 (sshd)
    Tasks: 1 (limit: 23555)
   Memory: 2.1M
  CGroup: /system.slice/sshd.service
          └─1031 /usr/sbin/sshd -D [email protected],chacha20-poly1305

Dec 08 16:48:53 LFCS-CentOS systemd[1]: Starting OpenSSH server daemon...
Dec 08 16:48:53 LFCS-CentOS sshd[1031]: Server listening on 0.0.0.0 port 22.
Dec 08 16:48:53 LFCS-CentOS systemd[1]: Started OpenSSH server daemon.

Press Q to exit.


Managing Service Lifecycle

Use systemctl for day-to-day operations:

OperationCommandDescription
Startsudo systemctl start sshd.serviceLaunch the service immediately
Stopsudo systemctl stop sshd.serviceStop the service
Restartsudo systemctl restart sshd.serviceStop and then start the service
Reloadsudo systemctl reload sshd.serviceReload configuration without full restart
Reload or Restartsudo systemctl reload-or-restart sshd.serviceTry reload, else restart

Enabling and Disabling at Boot

Control automatic startup:

# Enable at boot
$ sudo systemctl enable sshd.service

# Disable at boot
$ sudo systemctl disable sshd.service

# Check status
$ sudo systemctl is-enabled sshd.service

Combine with --now to apply immediately:

# Enable and start now
$ sudo systemctl enable --now sshd.service

# Disable and stop now
$ sudo systemctl disable --now sshd.service

Warning

Disabling and stopping sshd.service will prevent all SSH logins.


Masking and Unmasking Services

Prevent any activation—manual or dependency-driven—by masking:

$ sudo systemctl mask atd.service

Reverse masking:

$ sudo systemctl unmask atd.service

Attempting to start a masked service results in:

Failed to enable unit: Unit file /etc/systemd/system/atd.service is masked.
Failed to start atd.service: Unit atd.service is masked.

Listing All Service Units

View every service, regardless of state:

$ systemctl list-units --type=service --all

Further Reading

Watch Video

Watch video content

Practice Lab

Practice lab

Previous
Use scripting to automate system maintenance tasks