Updated: 11 October 2026 · Applies to: systemd 252 (RHEL 9.8, Rocky Linux 9.8) and 257 (RHEL 10.2, AlmaLinux 10.2); the same commands work on Debian 13 and Ubuntu 24.04 and 26.04
To list all services on Red Hat Enterprise Linux (RHEL) and its rebuilds AlmaLinux and Rocky Linux, run systemctl list-units --type=service --all. To see only the services that are running now, use systemctl list-units --type=service --state=running, and to see every installed service with its boot setting, use systemctl list-unit-files --type=service. For one service, systemctl status NAME shows whether it runs and why it stopped.
systemctl list-units --type=service --state=running # running now systemctl list-units --type=service --all # every loaded service, any state systemctl list-unit-files --type=service # every installed service and its boot setting systemctl list-unit-files --type=service --state=enabled # services that start at boot systemctl --failed # services that failed systemctl status crond # one service in detail
All output below comes from our tests on AlmaLinux 10.2; Rocky Linux 9.8, RHEL 9.8 and RHEL 10.2 gave the same columns and messages. Run the commands as root or with sudo.
1. List the services that are running
$ systemctl list-units --type=service --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
crond.service loaded active running Command Scheduler
rsyslog.service loaded active running System Logging Service
systemd-journald.service loaded active running Journal Service
systemd-userdbd.service loaded active running User Database Manager
Legend: 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.
4 loaded units listed.
A real server lists more (sshd, your web server, the database). The columns mean:
- LOAD:
loaded(the unit file was read),not-found(something refers to a service that is not installed) ormasked(blocked on purpose). - ACTIVE:
active,inactiveorfailed. - SUB: the detail, such as
running,exited(a one-shot job that finished) ordead(stopped).
Without --state, systemctl shows only services that are active, failed or have a job queued. In our test that was 13 services, while --all showed 52, including stopped and not-installed ones.
2. List all services, including stopped ones
$ systemctl list-units --type=service --all UNIT LOAD ACTIVE SUB DESCRIPTION ● auditd.service not-found inactive dead auditd.service ● console-getty.service masked inactive dead console-getty.service crond.service loaded active running Command Scheduler dnf-makecache.service loaded inactive dead dnf makecache rsyslog.service loaded active running System Logging Service ...
(Output shortened.) To filter by state, give one or more states: --state=inactive, --state=failed or --state=running,failed.
3. List installed services and whether they start at boot
list-units shows what systemd has loaded now. list-unit-files shows every service file installed on disk, with its boot setting:
$ systemctl list-unit-files --type=service --state=enabled UNIT FILE STATE PRESET crond.service enabled enabled dbus-broker.service enabled enabled getty@.service enabled enabled rsyslog.service enabled enabled ... 8 unit files listed.
The STATE column is enabled (starts at boot), disabled, static (started only by another unit), masked or alias. PRESET is the distribution's default for that service. Drop --state=enabled to see all of them; the last line gives the count (74 on our minimal test system).
4. Find one service and check its status
If you do not know the exact name, search the installed list:
$ systemctl list-unit-files --type=service | grep -i nginx nginx.service disabled disabled nginx@.service disabled disabled
Then check it:
$ systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-10-09 18:22:23 UTC; 14s ago
Main PID: 151 (crond)
Tasks: 1 (limit: 1638)
Memory: 960K (peak: 1.1M)
CGroup: /system.slice/crond.service
└─151 /usr/sbin/crond -n
(Output shortened; the last log lines follow.) Loaded says where the unit file is and whether it starts at boot; Active says whether it runs now. A stopped, disabled service looks like this:
$ systemctl status nginx
○ nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: disabled)
Active: inactive (dead)
For the full log of a service, run journalctl -u nginx -n 50. Service names differ between distributions: Apache is httpd on RHEL and apache2 on Debian and Ubuntu, SSH is sshd on RHEL and ssh on Ubuntu. A wrong name gives:
$ systemctl status apache2 Unit apache2.service could not be found.
5. List failed services
$ systemctl --failed UNIT LOAD ACTIVE SUB DESCRIPTION ● demo-app.service loaded failed failed Demo app ... 1 loaded units listed.
Run this after a reboot or an update. Read the cause with systemctl status demo-app and journalctl -u demo-app, fix it, then clear the failed state with systemctl reset-failed demo-app and start it again. For a database that will not start, see MySQL or MariaDB Fails to Start with systemctl: How to Find and Fix the Cause.
6. Output for scripts
systemctl list-units --type=service --state=running --no-legend --plain # no header, legend or bullets systemctl list-units --type=service --state=running --output=json # JSON systemctl is-active crond # prints active, inactive or failed systemctl is-enabled crond # prints enabled, disabled, static, masked, alias and so on
is-active also sets the exit code (0 when active; it returned 3 for a stopped service), so systemctl is-active --quiet nginx || systemctl restart nginx works in a script. --output=json worked on both systemd 252 (RHEL 9) and 257 (RHEL 10).
The old service and chkconfig commands
On RHEL 6 and CentOS 6 (long out of support), service --status-all and chkconfig --list listed services. On RHEL 9 and 10 they only see old SysV init scripts. On AlmaLinux 10 with the chkconfig and initscripts-service packages installed, service --status-all printed nothing, and chkconfig --list printed only this note:
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
The minimal RHEL 9 and 10 images did not include either package. Use systemctl; systemd Alternatives to the service, chkconfig and init Commands maps the old commands to the new ones.
Start, stop and enable a service
systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl reload nginx # re-read the configuration, if the service supports it systemctl enable --now nginx # start now and at every boot systemctl disable --now nginx # stop now and not at boot
A service that says "Unit is masked" was blocked on purpose; systemctl unmask NAME releases it. To manage services on another server over SSH, see How to Control systemd Services on a Remote Linux Server, and to restart a service automatically after a crash, see Configure systemd and start a service automatically after a crash in Linux?.
Official documentation: systemctl (systemd) and Managing system services with systemctl (Red Hat).
Ucartz services for this topic
- KVM VPS hosting: NVMe SSD and full root access, with Free Basic Managed Support.
- Unmanaged dedicated servers: full root access and free IPMI KVM, with Free Basic Managed Support.
- Linux server management: hardening, patching, monitoring and automation for Ubuntu, Debian, RHEL and AlmaLinux.
