Checking a service status in systemd shows whether the unit file was loaded correctly, whether the service process is running now, and whether the last start left any immediate error signals. It is the fastest read-only check after a configuration change, a restart, or a report that a daemon is not responding.

The systemctl status verb asks the systemd manager for the unit header and the most recent journal entries for that unit. A typical status view shows the unit description, the loaded unit-file path, the current active and substate, the main PID, any trigger relationships, and any short STATUS= message that the service reported to the manager.

The status screen is designed for human inspection, so line ordering and extra fields can vary by service type and distribution. When a short script-friendly answer is needed, systemctl show returns the normalized unit properties directly, and a service that uses Type=oneshot with RemainAfterExit=yes can legitimately appear as active (exited) even though no long-running process remains.

Steps to check service status using systemctl:

  1. Open a terminal session on the system that runs systemd.

    These checks are read-only. Add sudo only when the system restricts unit details or recent journal lines.

  2. Print the full runtime status for the target unit.
    $ systemctl status --no-pager --full systemd-journald.service
    ● systemd-journald.service - Journal Service
         Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
        Drop-In: /usr/lib/systemd/system/systemd-journald.service.d
                 └─nice.conf
         Active: active (running) since Mon 2026-04-13 08:55:50 UTC; 8s ago
    TriggeredBy: ● systemd-journald-dev-log.socket
                 ○ systemd-journald-audit.socket
                 ● systemd-journald.socket
           Docs: man:systemd-journald.service(8)
                 man:journald.conf(5)
       Main PID: 23 (systemd-journal)
         Status: "Processing requests..."

    Replace systemd-journald.service with the actual unit name. The Loaded: line shows the unit file path and unit-file state, while Active: shows the current runtime state and substate.

    For a service that uses Type=oneshot with RemainAfterExit=yes, systemd can report active (exited) after the start command finishes because the unit is still considered active.

  3. Check the normalized state fields when a short machine-friendly answer is needed.
    $ systemctl show -p LoadState -p ActiveState -p SubState -p UnitFileState systemd-journald.service
    LoadState=loaded
    ActiveState=active
    SubState=running
    UnitFileState=static

    systemctl status is intended for human inspection, while systemctl show exposes the unit properties directly for filtering, monitoring, or shell tests.

    UnitFileState=static means the unit has no install symlinks to enable or disable, not that the service is inactive.

  4. Read the recent unit journal when the status header shows a failure, a restart loop, or an unexpected status message.
    $ sudo journalctl -u systemd-journald.service -n 4 --no-pager
    Apr 13 08:55:50 server systemd-journald[23]: Collecting audit messages is disabled.
    Apr 13 08:55:50 server systemd-journald[23]: Received client request to flush runtime journal.
    Apr 13 08:55:50 server systemd-journald[23]: Time spent on flushing to /var/log/journal/##### snipped ##### is 17.440ms for 2121 entries.
    Apr 13 08:55:50 server systemd-journald[23]: System Journal is 8.0M, max 4.0G, 3.9G free.

    systemctl status already includes a few recent lines, but journalctl -u is the cleaner follow-up when the unit needs deeper diagnosis.