How to Use systemd Soft Reboot on RHEL

Deepak Prasad
Tested on Red Hat Enterprise Linux 10.2 (Coughlan)
Package systemd-257-23.el10_2.2.x86_64
Applies to RHEL 10.1 and later; Rocky Linux 10, AlmaLinux 10, and CentOS Stream 10 builds that ship a systemd soft-reboot capable of systemctl soft-reboot
Privilege sudo or root to run systemctl soft-reboot; normal user can inspect SoftRebootsCount, boot_id, and PIDs
Scope What soft reboot does, how to run systemctl soft-reboot, how to prove the kernel stayed up, when it helps after userspace updates, and when a full reboot is still required. Does not cover a full bootc image-mode workflow.
Related guides systemctl command
Linux boot, reboot and shutdown
List systemd services with systemctl
Short on time?Beta Get the gist of this 10-minute read in seconds, then ask follow-up questions

In this article we will use systemctl soft-reboot on RHEL to restart userspace while the running kernel stays up, then prove what survived with SoftRebootsCount, boot_id, uptime, and service PIDs.

Soft reboot support landed in RHEL 10.1. Red Hat positions it for userspace updates such as glibc, openssl, and dbus-broker, where you want processes to re-link to new libraries without a full firmware-to-kernel cycle. This walkthrough was captured on RHEL 10.2 with systemd 257.

IMPORTANT
systemctl soft-reboot drops interactive sessions, including SSH. Run it from a console you can reattach to, or plan to reconnect after userspace comes back. Do not treat soft reboot as a silent background refresh.

What Is a systemd Soft Reboot?

A soft reboot is a userspace-only restart. By default, systemd stops normal services and remaining processes, re-executes PID 1, then runs a normal userspace boot transaction. The kernel and hardware keep running.

NORMAL REBOOT

  Applications
      │
  Services
      │
  systemd
      │
  Kernel              ← restarted
      │
  Bootloader          ← runs again
      │
  BIOS / UEFI         ← runs again
      │
  Hardware


SOFT REBOOT

  Applications        ← restarted
      │
  Services            ← restarted
      │
  systemd / PID 1     ← re-executed
  ──────────────────────────────
  Kernel              ← keeps running
  Hardware            ← keeps running

That is why SoftRebootsCount can increase while /proc/sys/kernel/random/boot_id and kernel uptime stay tied to the same kernel instance.


Soft Reboot vs Normal Reboot

Topic Soft reboot (systemctl soft-reboot) Normal reboot (systemctl reboot)
Userspace Restarts Restarts
Kernel Stays running Restarts
Firmware / bootloader / initramfs Skipped Run again
Kernel boot ID Same New
SoftRebootsCount Increments Resets to 0 after a full boot
/proc/uptime Continues Resets
Typical use Userspace library and service refresh Kernel, firmware, initramfs, or hardware reset

Check Whether Soft Reboot Is Available

Confirm systemd is new enough, that soft-reboot.target exists, and that SoftRebootsCount is readable. On this RHEL 10.2 host:

bash
systemctl --version
output
systemd 257 (257-23.el10_2.2-g009f2a8)
+PAM +AUDIT +SELINUX -APPARMOR +IMA +IPE +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT -QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK +BTF +XKBCOMMON +UTMP +SYSVINIT +LIBARCHIVE

systemd 257 on RHEL 10.2 includes soft reboot. Next, confirm the target unit is present. The lines that matter are the description and the required soft-reboot service:

bash
systemctl cat soft-reboot.target
output
# /usr/lib/systemd/system/soft-reboot.target
...
[Unit]
Description=Reboot System Userspace
Requires=systemd-soft-reboot.service

Then read SoftRebootsCount. It starts at 0 after a full boot and increases by one for each completed soft reboot:

bash
systemctl show --value --property SoftRebootsCount
output
0

If the property or soft-reboot.target is missing, the host is too old for this workflow. Soft reboot is a RHEL 10.1+ feature.


Record the System State Before Soft Reboot

Before running the soft reboot, record a few values so you can prove afterward that only userspace restarted.

bash
uname -r
output
6.12.0-211.47.1.el10_2.x86_64

Save this kernel version. It should be exactly the same after the soft reboot.

bash
cat /proc/sys/kernel/random/boot_id
output
441ecd50-c27c-4b8c-936d-0aea2271b183

boot_id identifies the current kernel boot instance. It should stay the same.

bash
cat /proc/uptime
output
57792.91 133999.49

The first field is seconds since this kernel booted. After soft reboot it should continue increasing instead of resetting.

SoftRebootsCount was still 0 (recorded in the availability section above). It should increase by one.

bash
systemctl show sshd -p MainPID -p ActiveEnterTimestamp
output
MainPID=1247
ActiveEnterTimestamp=Sat 2026-09-19 06:54:35 IST

I also recorded the sshd PID. Because SSH is a userspace service, its PID should change when the service starts again.

Keep these values handy; we will compare them after the soft reboot.


Perform a Soft Reboot

Enqueue the userspace reboot. The command returns after the job is queued; your SSH session then drops when userspace stops:

bash
sudo systemctl soft-reboot

This is equivalent to starting soft-reboot.target in replace-irreversibly mode. Wait for the host to accept SSH again, then reconnect.

On this lab the soft reboot completed around 22:58 IST. The SSH session closed as expected, then a new login worked once userspace was back.


Verify the Soft Reboot

Reconnect and run the same checks. Compare each result with the values you saved earlier.

bash
uname -r
output
6.12.0-211.47.1.el10_2.x86_64

Same kernel release. Soft reboot did not load a different kernel.

bash
cat /proc/sys/kernel/random/boot_id
output
441ecd50-c27c-4b8c-936d-0aea2271b183

Same boot ID. This is still the same kernel instance.

bash
cat /proc/uptime
output
58447.57 135703.86

The uptime continued increasing from 57792.91 to 58447.57 instead of resetting to zero, confirming that the kernel never rebooted.

bash
systemctl show --value --property SoftRebootsCount
output
1

The counter changed from 0 to 1, confirming that one soft reboot completed.

bash
systemctl show sshd -p MainPID -p ActiveEnterTimestamp
output
MainPID=136463
ActiveEnterTimestamp=Sat 2026-09-19 22:58:06 IST

sshd came back under a new MainPID (1247 → 136463). The new ActiveEnterTimestamp matches the soft reboot window on this lab.

bash
systemctl --failed
output
  UNIT LOAD ACTIVE SUB DESCRIPTION

0 loaded units listed.

No failed units after the soft reboot on this host. If any units are failed, check them before treating the soft reboot as successful.

Expected pattern after a successful soft reboot:

Check Expected result
uname -r Same
boot_id Same
/proc/uptime Continues (does not reset)
SoftRebootsCount Increases by 1
Service MainPID (for example sshd) Different
systemctl --failed Clean, or only known failures

What Happens During systemctl soft-reboot?

A soft reboot shuts down normal userspace services, restarts systemd as PID 1, and starts the normal userspace boot sequence again. It does this without restarting the kernel or passing through firmware, the bootloader, or initramfs.

Under the hood, systemctl soft-reboot starts soft-reboot.target, which requires systemd-soft-reboot.service. That service:

  • Lets the normal shutdown path stop services that have DefaultDependencies
  • Sends SIGTERM, then SIGKILL, to processes still running
  • Optionally switches root to /run/nextroot/ when that path exists (image-mode / staged root use case)
  • Re-executes the service manager (PID 1)
  • Enqueues a new userspace boot transaction

See man systemd-soft-reboot.service on the host for the upstream wording.


What Survives a Soft Reboot?

The following kernel-level state remains in place across a normal soft reboot:

  • Running kernel and loaded kernel modules
  • Kernel uptime (/proc/uptime)
  • Kernel boot ID (/proc/sys/kernel/random/boot_id)
  • Kernel settings already applied through /proc/sys or /sys
  • Hardware and firmware state

Normal application services are restarted. systemd does support advanced configurations where selected resources or services survive a soft reboot, but that is not the default behavior covered here.

Soft reboot is not a way to apply a new kernel, unload mismatched modules safely, or re-run firmware initialization.


What Is Restarted?

By default, userspace comes up again through the normal systemd boot transaction. In practice that includes:

  • systemd units and services
  • SSH and other network daemons
  • NetworkManager and other userspace networking components
  • D-Bus (dbus-broker on modern RHEL)
  • Applications and login sessions

Any process that still held an old glibc or openssl mapping is stopped and started again so it can open the new libraries.


When Should You Use Soft Reboot?

Use soft reboot when the change is userspace and you want a clean process restart without a full reboot cycle:

  • After updating shared libraries such as glibc or openssl
  • After updating dbus-broker or other core userspace services
  • When many services need a coordinated restart after a large dnf userspace update

After dnf update, dnf needs-restarting can hint whether a reboot is needed. Soft reboot covers the userspace side; it does not replace a real reboot for kernel packages.


When Soft Reboot Is Not Enough

Plan a normal systemctl reboot (or equivalent) when you need:

  • A new kernel package or kernel command line
  • Kernel module changes that must match a different running kernel
  • Kernel, kpatch, or firmware changes that require the full documented activation path
  • initramfs rebuilds that must be exercised on the next boot path
  • Hardware re-initialization

Red Hat’s RHEL 10.1 release notes call out the same limits: soft reboot does not apply kernel, kpatch, or firmware initialization changes.


systemctl soft-reboot vs reboot vs kexec

Action Userspace Kernel Firmware / bootloader
systemctl soft-reboot Restarted Same kernel continues Skipped
systemctl reboot Restarted New boot of selected kernel Normally runs
systemctl kexec / kexec reboot Restarted Switches to another kernel Skipped

Soft reboot is not a kexec reboot. Soft reboot leaves the current kernel running; kexec switches kernels. Use soft reboot when only userspace needs restarting. Use a normal reboot when you need the complete boot path, or use kexec only where your platform has a documented and tested kernel-switch workflow.

For ordinary service control without any reboot semantics, use systemctl restart unit instead. See List systemd services with systemctl and the systemctl command cheat sheet.


Measure Soft Reboot Downtime

From a second host, watch a simple probe while the target soft-reboots. Examples:

  • Repeated ssh or nc checks against the management port
  • An HTTP health check if the host runs a web service

Compare the gap with a normal systemctl reboot on the same host. Soft reboot should skip firmware and kernel init, so the outage window is usually shorter, but exact seconds depend on how many services stop and start on your system. Measure on your own pair of hosts; do not copy someone else’s timing as a guarantee.


Soft Reboot with RHEL Image Mode / bootc

RHEL image mode also uses systemd soft reboot. In that case, /run/nextroot/ can be used to switch to a staged userspace image while keeping the current kernel running. Red Hat's bootc commands also provide --soft-reboot=auto and --soft-reboot=required. Kernel changes still require a full reboot. For the image-mode workflow, see Performing soft reboots to RHEL bootc images.


Troubleshooting

Symptom Likely cause Fix
systemctl: Unknown command verb soft-reboot systemd too old, or not RHEL 10.1+ soft-reboot capable Check systemctl --version and systemctl cat soft-reboot.target; upgrade to a RHEL 10.1+ stream
SSH closes during soft reboot Expected: userspace and sshd restart Reconnect after userspace returns; use console access if remote reconnect fails
SoftRebootsCount does not increase Soft reboot did not complete, or you are looking at a different host/boot Confirm the command was soft-reboot (not reboot); re-check after reconnect; SoftRebootsCount resets after a full boot
Updated kernel still not running Soft reboot never loads a new kernel Install the kernel package, then use systemctl reboot (or your platform’s full reboot path)
Service does not return after soft reboot Unit failed during the new userspace boot transaction Run systemctl --failed and journalctl -b -u unit; fix the unit, then systemctl start unit

Summary

systemctl soft-reboot on RHEL 10.1+ restarts userspace while the same kernel keeps running. On this RHEL 10.2 lab, SoftRebootsCount moved from 0 to 1, sshd got a new MainPID, and uname -r, boot_id, and /proc/uptime stayed on the same kernel instance.

Use soft reboot after userspace updates such as glibc, openssl, or dbus-broker when you need processes to re-link cleanly. Use a normal reboot when the kernel, initramfs, firmware, or hardware path must change. Record SoftRebootsCount, boot_id, uptime, and a service PID before you run it, then reconnect and compare. That comparison is how you prove only userspace restarted.


References


Frequently Asked Questions

What does systemctl soft-reboot do?

It restarts normal userspace services, re-executes systemd as PID 1, and starts a new userspace boot transaction while the kernel and hardware keep running. It does not restart the kernel or walk firmware, the bootloader, or initramfs.

Does SSH disconnect during a soft reboot?

Yes. SSH and other userspace services restart, so interactive sessions drop. Reconnect after userspace is back.

Does soft reboot reset uptime?

No. /proc/uptime continues from the same kernel boot. SoftRebootsCount increases instead, which is how you count completed userspace soft reboots since the last full boot.

Can I use soft reboot after dnf update?

Yes for many userspace packages such as shared libraries and services. If the update includes a new kernel, kpatch, firmware, or initramfs change that must be exercised on a full boot path, schedule a normal reboot instead.

How do I prove the kernel was not restarted?

Compare uname -r, /proc/sys/kernel/random/boot_id, and /proc/uptime before and after. They should stay on the same kernel instance, while SoftRebootsCount increases and service MainPIDs change.

Finished reading?Beta Get the key takeaways in seconds, then ask follow-up questions
Omer Cakmak

Linux Administrator

Highly skilled at managing Debian, Ubuntu, CentOS, Oracle Linux, and Red Hat servers. Proficient in bash scripting, Ansible, and AWX central server management, he handles server operations on OpenStack, KVM, Proxmox, and VMware.

  • Debian
  • Ubuntu
  • Linux
  • Red Hat Enterprise Linux
  • Shell Script
  • System Administration