Diagnose a SUSE Server That Hangs at the systemd Shutdown Screen

If SUSE Linux Enterprise Server hangs during systemd shutdown, identify the unit with a running stop job or inspect the final messages from the previous boot, then fix that unit or its dependency. A unit is a systemd-managed resource such as a service or mount; a stop job is systemd’s request to shut one down. Do not lower a global timeout or force power off as a first fix, because a service or filesystem may still be closing files or writing data.

This walkthrough follows the SLES 15 SP7 documentation checked in October 2026. The exact stop policy depends on the service and storage vendor, so use their guidance for any unit-specific changes.

1. Observe the shutdown safely

Step 1: Record the exact message and wait for useful evidence

If the console shows “A stop job is running for …” with a countdown, write down the named service or mount and whether the timer changes. This means systemd awaits that unit’s stop operation, not necessarily that the OS crashed; databases and remote storage may need time to close cleanly.

Illustrative Linux console showing a shutdown stop-job message for an example service and a countdown
An example console message names the unit systemd is waiting for; the displayed service and countdown are illustrative.

Observe through remote or serial console, or another available terminal. Avoid reset or power commands while writes may be in progress. If the system stops responding, record the last visible line and continue after it boots.

2. Find the unit that is waiting

Step 2: Inspect systemd jobs if the machine still accepts commands

If SSH or a second terminal still works, ask systemd which jobs are running or waiting, then check the unit named on screen:

sudo systemctl list-jobs
sudo systemctl status SERVICE.service
Illustrative terminal output from systemctl list-jobs with a stop job for example.service in the running state
The job list can identify a service whose stop operation is still running; the row shown is an example.

Replace SERVICE with the actual unit name. A running stop job narrows the search but does not explain why the process has not exited. Read its status and logs before changing configuration. If systemd no longer answers, do not cancel jobs blindly; inspect the previous journal after the host returns.

3. Use the previous boot to identify the cause

Step 3: Read the end of the previous boot’s journal

The journal is systemd’s indexed log of kernel, service, and system messages. After the next successful start, list recorded boots and inspect the end of the previous one:

sudo journalctl --list-boots
sudo journalctl -b -1 -e
Illustrative terminal running journalctl boot-list and showing the end of the prior boot’s shutdown messages
The -1 offset selects the preceding boot, and -e moves to its most recent entries.

Look for the last “Stopping” message, a timeout, retries, or a named device or mount. The final line is only a clue: shutdown ordering may leave another unit waiting behind it. Compare timestamps and nearby messages.

Step 4: Filter logs for the suspected service

When the screen or journal names a service, query only that unit’s previous-boot entries. Review its loaded configuration as well:

sudo journalctl -b -1 -u SERVICE.service --no-pager
sudo systemctl cat SERVICE.service
Illustrative terminal filtering the previous boot journal for example.service stop messages
Filtering by unit helps distinguish a slow service shutdown from unrelated messages elsewhere in the journal.

Check for a custom ExecStop, a script that waits indefinitely, a lingering child process, or an application error in its shutdown hook. For vendor units, compare the package and configuration with supported guidance before editing.

Step 5: Check mounts and storage only when the evidence points there

If the journal names a mount, device, or remote filesystem, inspect the mount table and the matching entry in /etc/fstab:

sudo findmnt --verify --verbose
Illustrative terminal running findmnt verification to review mount entries and options
Use mount verification when logs implicate a mount; the displayed entries are illustrative and must be checked against the host.

Check whether an NFS, CIFS, iSCSI, or other remote dependency is reachable and expected during shutdown. Remove an obsolete mount entry only after confirming it is unused. Do not force-unmount a live filesystem based only on a slow reboot.

4. Fix the cause without hiding it

Step 6: Repair the service or adjust only its documented stop policy

For a service that does not exit, fix its shutdown script, application configuration, or package issue first. A per-unit drop-in from sudo systemctl edit SERVICE.service is stored under /etc/systemd/system/ without editing the vendor file. SUSE documents TimeoutSec for service start or stop; use a vendor-approved value for this workload.

Illustrative systemd service drop-in editor showing a Service section and a note to use a vendor-approved timeout
A unit drop-in can hold a targeted override; the note shown is guidance, not a timeout value.

After a documented edit, reload systemd’s unit definitions with sudo systemctl daemon-reload and inspect the result with sudo systemctl cat SERVICE.service. A longer timeout can let a legitimate shutdown finish but can also lengthen a failed reboot. A shorter one may terminate a service before it flushes state. Do not change global defaults to hide one unit’s defect.

Step 7: Preserve logs for the next incident

SLES stores journal data under /run/log/journal/ by default, and that volatile directory is cleared at reboot. If journalctl -b -1 has no previous-boot entries, enable persistent journal storage for future diagnosis:

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix=/var/log/journal
sudo journalctl --flush
Illustrative terminal creating the persistent journal directory, setting its permissions, and flushing logs
These commands preserve new journal entries across reboots; they cannot restore logs already lost from volatile storage.

Persistent logs use space under /var; SUSE notes the journal may use up to 10 percent of that filesystem by default. Check free space and retention, especially on small /var volumes.

5. Verify the next planned reboot

Step 8: Confirm the stop completed and the server returned to service

Once the suspected cause is corrected, schedule one controlled reboot with console access available. After the machine returns, inspect the previous boot’s final messages and check the service’s current state:

sudo journalctl -b -1 -e
sudo systemctl status SERVICE.service
Illustrative terminal showing a completed example service stop in the previous boot and a current service status check
After a later restart, verify the previous shutdown reached its final messages and the service is healthy again; this is an example view, not test evidence.

The issue is resolved when the server shuts down without waiting on the same unit, boots normally, and the service or mount works. If logs end abruptly or show kernel, controller, or hardware errors, preserve them and investigate with SUSE or the hardware vendor instead of tuning timeouts.

For command details, see the SLES 15 SP7 systemd guide and SUSE’s guide to persistent journals and journalctl filters. These steps identify likely blockers; the correct service, filesystem, or hardware remedy depends on the unit named by the machine’s own logs.

Leave a Comment

Diagnose a SUSE Server That Hangs at the systemd Shutdown Screen

Diagnose a SUSE Server That Hangs at the systemd Shutdown Screen

Use systemd jobs and the previous boot journal to locate a slow service, mount, or storage dependency, then correct it without masking the cause.

Open Only the Web Traffic Your SLES 15 Server Needs

Open Only the Web Traffic Your SLES 15 Server Needs

Use firewall-cmd to inspect the active zone, allow HTTP safely, preserve SSH access, and verify that the rule survives a reload on SLES 15.

Diagnose SLES PAM Login Failures Without Locking Yourself Out

Diagnose SLES PAM Login Failures Without Locking Yourself Out

Trace a PAM failure to its service, account policy, or identity provider, then repair the right SLES configuration while preserving a working admin session.

SLES Boot Module Load Failure: Find the Driver and Fix It

SLES Boot Module Load Failure: Find the Driver and Fix It

Trace a failed kernel module at SLES startup, correct an obsolete boot entry or repair the required driver, and verify the next boot.

Set Up DM-Multipath on SLES 15 for Reliable SAN Paths

Set Up DM-Multipath on SLES 15 for Reliable SAN Paths

Prepare SCSI SAN paths, enable multipathd, inspect SUSE’s hardware defaults, and verify stable device maps without guessing array settings.

Clear a Zypper Lock Safely on SUSE Linux Enterprise

Clear a Zypper Lock Safely on SUSE Linux Enterprise

Find the process holding Zypper’s package lock, distinguish process conflicts from package locks, and retry updates without deleting lock files blindly.

Build a Supported SLES 15 HA Cluster with Fencing First

Build a Supported SLES 15 HA Cluster with Fencing First

Register SLE HA, bootstrap SLES 15 nodes, then add fencing, quorum, and tested service resources before relying on failover.

SLES Zypper HTTP 500: Find the Failing Repository

SLES Zypper HTTP 500: Find the Failing Repository

Trace a Zypper refresh error to SUSE, RMT, or a third-party endpoint, then apply the right server-side or cache fix without disabling essential updates.

SLES Thin Pool Out of Space: Extend LVM Safely and Restore Writes

SLES Thin Pool Out of Space: Extend LVM Safely and Restore Writes

Resolve SUSE LVM thin-pool space errors by checking data and metadata usage, expanding the pool safely, and preventing repeat outages.

When SLES Btrfs Goes Read-Only: Diagnose Before Remounting

When SLES Btrfs Goes Read-Only: Diagnose Before Remounting

Identify whether Btrfs is intentionally read-only, short on space, or protecting data after errors, then choose a recovery path that fits the cause.