How to Find Running Services in Linux with Systemd Commands Quick Guide
Mastering Linux Services: A Comprehensive Guide to Systemd Commands by revWhiteShadow
In the intricate world of Linux systems administration, understanding and effectively managing running services is paramount. These services, also known as daemons, are background processes that provide essential functionalities, from web serving and database management to network connectivity and system logging. Linux offers robust mechanisms for controlling these services, and at the forefront of modern service management is systemd. This powerful and sophisticated system and service manager has become the de facto standard across a vast majority of Linux distributions, including Debian, Ubuntu, Fedora, CentOS, and RHEL, among many others. At revWhiteShadow, we are dedicated to providing you with the deepest insights into navigating and mastering these critical system components. This comprehensive guide will equip you with the knowledge to find running services in Linux using systemd commands, ensuring your systems operate with optimal efficiency and reliability.
Understanding the Role of Systemd in Modern Linux
Before we dive into the specific commands, it’s crucial to grasp the fundamental role systemd plays in the modern Linux ecosystem. Systemd is not merely a service manager; it’s an init system and a system manager designed to streamline the boot process, manage system resources, and provide a consistent interface for controlling services. It replaces older init systems like SysVinit and Upstart, offering significant improvements in speed, dependency management, and overall system stability. Systemd achieves this through its unit files, which describe system components such as services, sockets, devices, and mount points. Each of these components is represented as a unit, and systemd manages their lifecycle and dependencies efficiently. This structured approach makes it easier to identify, control, and monitor the various processes that keep your Linux system alive and functional.
Identifying Running Services with Systemd: The Core Commands
The primary objective when troubleshooting or auditing a Linux system is to know what is actively running. Systemd provides a straightforward yet powerful command-line interface to achieve this. The cornerstone of service management within systemd is the systemctl
command. This utility serves as the central point of interaction for all systemd-related operations.
Listing All Active Services
To get a comprehensive overview of all services that systemd currently considers active (meaning they have been started and are running without error), we utilize the systemctl list-units
command with a specific filter.
The systemctl list-units --type=service
Command
The most direct way to find running services is to list all units that are specifically of the service
type and are currently in an active state.
systemctl list-units --type=service --state=running
Let’s break down this command:
systemctl
: This is the primary command-line utility for interacting with systemd.list-units
: This subcommand instructs systemd to list all managed units.--type=service
: This crucial flag filters the output to display only units of theservice
type. This excludes other unit types like sockets, devices, timers, etc., ensuring we focus solely on background processes.--state=running
: This flag further refines the list to include only those services that are currently in the running state.
The output of this command will typically include several columns:
- UNIT: The name of the service unit file (e.g.,
apache2.service
,ssh.service
). - LOAD: Indicates whether the unit file has been loaded and parsed by systemd. An
loaded
status means systemd knows about the service. - ACTIVE: This column shows the current operational state of the service. For running services, this will be
active
. Other possible states includeinactive
(not running),failed
(an error occurred),activating
(in the process of starting), anddeactivating
(in the process of stopping). - SUB: Provides a more granular sub-state. For active services, this might be
running
(the process is executing),exited
(the service has completed its task and terminated successfully), orplugged
(for certain types of services). - DESCRIPTION: A human-readable description of the service, often extracted from the unit file.
By executing systemctl list-units --type=service --state=running
, you gain an immediate and clear picture of all the services actively contributing to your Linux system’s operation. This is invaluable for diagnosing performance issues, identifying unnecessary background processes, or simply understanding what your server is doing.
Listing All Loaded Service Units (Regardless of State)
While seeing actively running services is vital, sometimes it’s beneficial to see all services that systemd is aware of, even those that are currently stopped or have failed. This provides context and allows you to check the configured state of services.
The systemctl list-units --type=service --all
Command
To achieve this broader view, we can modify the previous command slightly.
systemctl list-units --type=service --all
The --all
flag includes units that are not just active
but also those that are inactive
, failed
, activating
, or deactivating
. This gives you a complete inventory of all service units that systemd has loaded. This is particularly useful for:
- Identifying potential issues: Services showing a
failed
state clearly indicate a problem that needs investigation. - Auditing configured services: You can see which services are intended to be run at boot, even if they are currently stopped.
- Understanding dependencies: By seeing all loaded services, you can begin to infer potential dependencies between them.
The output will be similar to the previous command, but the ACTIVE column will display a wider range of states, providing a more comprehensive status report.
Filtering by Service Status Keywords
Systemd’s systemctl
command is highly flexible, allowing you to filter output based on specific keywords or states directly. This can be more efficient for quick checks without needing to pipe the output to other tools.
Using grep
for Targeted Searches
While systemctl
has its own filtering options, for more complex pattern matching, the standard Unix grep
command is an indispensable companion.
systemctl list-units --type=service | grep running
This command lists all loaded service units and then pipes the output to grep running
. grep
will then filter and display only those lines that contain the word “running”. This is a quick way to highlight the services currently in that state.
You can also use grep
to look for specific services by name. For instance, to check the status of the Apache web server:
systemctl list-units --type=service | grep apache
This would show any service unit containing “apache” in its name, regardless of its current state, and then grep
would further filter to show lines containing “running” if you combine it:
systemctl list-units --type=service | grep apache | grep running
This demonstrates the power of combining systemd commands with standard Linux utilities for highly specific information retrieval.
Checking the Status of a Specific Service
Beyond listing services, you often need to check the precise status and recent activity of a particular service. This is where the systemctl status
command shines.
The systemctl status <service_name>
Command
This is arguably the most frequently used command for diagnosing service-related problems.
systemctl status sshd.service
Or, if you know the service is running and want a quick confirmation:
systemctl status sshd
(The .service
suffix is often optional when the unit type is unambiguous).
The output of systemctl status
is rich with information:
- Unit File: It confirms the full path to the
.service
file. - Loaded State: Indicates if the unit file was successfully loaded.
- Active State: Shows whether the service is
active
orinactive
. - Sub State: Provides further detail like
running
,exited
,dead
, etc. - Process IDs (PIDs): Crucially, it lists the Process IDs of the main service process and any child processes. This is essential for correlating systemd’s view with the actual running processes on the system.
- Recent Log Entries: It displays the last few relevant log messages from the service, often sourced from the system journal. This is incredibly valuable for understanding why a service might have started, stopped, or failed.
- Control Group (cgroup): Shows the cgroup the service’s processes are running in, which is important for resource management.
By examining the output of systemctl status
, you can quickly ascertain if a service is functioning correctly, identify any errors, and see its operational history. This is indispensable for any system administrator.
Exploring Systemd Unit Files: The Foundation of Service Management
Understanding how systemd manages services starts with its unit files. These are configuration files that describe how a service should be run, its dependencies, its resource limits, and how it should be started and stopped.
Locating Service Unit Files
Systemd unit files are typically stored in several directories, with the most common being:
/lib/systemd/system/
: For packages installed from repositories./etc/systemd/system/
: For locally created or modified unit files. These typically override files in/lib/systemd/system/
./run/systemd/system/
: For runtime-generated unit files.
The systemctl status
command usually points you to the specific unit file being used for a service.
The systemctl cat <service_name>
Command
To view the contents of a unit file, you can use the systemctl cat
command.
systemctl cat apache2.service
This command will display the entire content of the apache2.service
unit file, including sections like [Unit]
, [Service]
, and [Install]
. This is crucial for understanding:
- Dependencies (
Requires=
,Wants=
,After=
,Before=
): How this service relates to others. - Service Type (
Type=simple
,Type=forking
,Type=oneshot
): How systemd should manage the service process. - Execution Commands (
ExecStart=
,ExecStop=
,ExecReload=
): The actual commands used to start, stop, and reload the service. - Restart Behavior (
Restart=
,RestartSec=
): When and how systemd should automatically restart a failed service. - User and Group (
User=
,Group=
): Under which user and group the service should run.
By dissecting these unit files, you gain a deep understanding of how a service is configured and how systemd interacts with it.
Managing Service States: Start, Stop, Restart, and Reload
Beyond just finding running services, effectively managing their lifecycle is a core administrative task. Systemd’s systemctl
command provides intuitive ways to control service states.
Starting a Service
To initiate a service that is not currently running:
systemctl start <service_name>
For example, to start the SSH daemon:
systemctl start sshd.service
Stopping a Service
To gracefully terminate a running service:
systemctl stop <service_name>
For instance, to stop the Apache web server:
systemctl stop apache2.service
Restarting a Service
A common operation is to restart a service, which involves stopping it and then starting it again. This is often done after configuration changes.
systemctl restart <service_name>
Example:
systemctl restart nginx.service
Reloading a Service
Many services support a “reload” operation, which allows them to re-read their configuration files without completely stopping and restarting. This is a more graceful way to apply configuration changes, as it minimizes service interruption.
systemctl reload <service_name>
For example, to reload the Nginx web server configuration:
systemctl reload nginx.service
This is significantly faster and causes less downtime than a full restart.
Controlling Service Autostart Behavior
One of systemd’s most powerful features is its ability to manage whether services start automatically at system boot. This is controlled using enable
and disable
commands.
Enabling a Service to Start at Boot
To ensure a service starts automatically every time your system boots up, you need to enable it. This creates symbolic links in the appropriate runlevel directories managed by systemd.
systemctl enable <service_name>
Example:
systemctl enable sshd.service
When you enable a service, systemd creates symlinks in /etc/systemd/system/
that point to the service’s definition file. These links are typically associated with “targets,” which are essentially collections of units that define a particular system state (e.g., multi-user.target
for a typical server environment).
Disabling a Service from Starting at Boot
Conversely, if you want to prevent a service from starting automatically at boot, you can disable it. This removes the symbolic links created by the enable
command.
systemctl disable <service_name>
Example:
systemctl disable bluetooth.service
Disabling a service does not stop it if it is currently running. It only affects future boot cycles.
Checking if a Service is Enabled
To quickly check if a service is configured to start at boot, you can use systemctl is-enabled
.
systemctl is-enabled sshd.service
The output will be either enabled
or disabled
. If the service is enabled, it will also show the path to the symbolic link.
Advanced Systemd Service Discovery and Analysis
Beyond the basic commands, systemd offers deeper insights into service interactions and dependencies.
Listing All Loaded Units (Beyond Services)
While this guide focuses on services, it’s worth noting that systemctl list-units
without any type filters will show all loaded units, including .socket
, .device
, .mount
, .target
, .timer
, and more. This provides a holistic view of the system’s managed components.
systemctl list-units
Analyzing Service Dependencies
Understanding service dependencies is crucial for troubleshooting boot issues or understanding how services interact. Systemd provides tools for visualizing these relationships.
The systemctl list-dependencies <service_name>
Command
This command shows the dependency tree for a given service.
systemctl list-dependencies apache2.service
This output will list all services, targets, and other units that the specified service depends on (Requires=
, Wants=
), and also those that depend on it (reverse dependencies). This is incredibly useful for diagnosing startup order problems or identifying the root cause of a service failure if it depends on another failing unit.
Visualizing Dependencies with systemd-analyze
For a more graphical representation of the boot process and service dependencies, the systemd-analyze
command is invaluable.
systemd-analyze dot --order | dot -Tsvg > boot_dependencies.svg
This command generates a DOT language representation of the unit dependencies and then uses Graphviz (dot
) to convert it into an SVG image. Opening boot_dependencies.svg
in a web browser or image viewer will show a complex graph of how units are interconnected during the boot process, helping to visualize startup order and dependencies.
Monitoring Service Activity with Journalctl
The systemd journal (journalctl
) is the central logging facility for systemd-based systems. It aggregates logs from all services and system components, making it the primary tool for investigating service behavior and troubleshooting errors.
Viewing Logs for a Specific Service
To view all log messages generated by a particular service:
journalctl -u <service_name>
Example:
journalctl -u sshd.service
This will display an infinite scroll of logs for the SSH daemon. You can add flags like -f
to follow the logs in real-time, similar to tail -f
.
journalctl -u sshd.service -f
Filtering Journal Entries
journalctl
is incredibly powerful for filtering logs by time, priority, and other criteria. For example, to see error messages from a service since the last boot:
journalctl -u <service_name> -b -p err
Where:
-b
: Filters logs from the current boot.-p err
: Filters for messages with a priority of “error” or higher.
By combining systemctl
commands for service control and journalctl
for log analysis, you have a complete toolkit for managing and troubleshooting services on your Linux system.
Best Practices for Service Management with Systemd
At revWhiteShadow, we always advocate for best practices to ensure system stability and security. When working with systemd services, consider the following:
- Use
.service
files judiciously: Always aim to use existing unit files provided by packages. If you need to create custom services, place them in/etc/systemd/system/
. - Understand service dependencies: Before making significant changes, analyze service dependencies using
systemctl list-dependencies
. - Leverage
journalctl
: Makejournalctl
your go-to tool for diagnosing any service issues. - Test changes thoroughly: After enabling, disabling, or modifying service configurations, restart the system or the affected services to ensure everything works as expected.
- Secure your services: Ensure services are running with the least privilege necessary and that their configurations are hardened.
By mastering the systemd commands, you gain granular control over your Linux system’s background processes, ensuring efficiency, reliability, and a robust operational environment. This comprehensive understanding is a cornerstone of effective Linux administration, and we at revWhiteShadow are committed to providing you with the tools and knowledge to excel.