How to List Systemd Services in Linux

While systemd solves many problems with system management, it is also confusing sometimes.

Even a simple task like listing systemd services could send you thinking.

In this article, I'll show you how to list systemd services. I'll also explain the output so that it is easier for you to understand the different states of the services.

I presume that you have some knowledge of systemd but even if you don't, it should be fine.

How to list active services in systemd

systemd services are managed by the systemctl command. If you run systemctl without any arguments, it invokes the default list-units sub-command and it lists various types of systemd units like services, sockets, targets etc.

But your aim is to list the services so you specify the unit type with --type flag like this:

systemctl --type=service

Did you notice that I didn't specify the list-units sub-command because it is the default? If you want to follow the convention, you may specify that as well. I prefer it this way and I'll follow this convention in the rest of the tutorial.

systemctl list-units --type=service

In both cases the output will be the same. By default, this command shows only loaded and active services in alphabetical order:

  UNIT                     LOAD   ACTIVE SUB     DESCRIPTION                                                       
  accounts-daemon.service  loaded active running Accounts Service                                                  
  acpid.service            loaded active running ACPI event daemon                                                 
  alsa-restore.service     loaded active exited  Save/Restore Sound Card State                                     
  apparmor.service         loaded active exited  Load AppArmor profiles                                            
  apport.service           loaded active exited  LSB: automatic crash report generation

Let me explain the output:

  • UNIT: name of the systemd unit.
  • LOAD: whether the unit configuration file has been parsed by systemd.
  • ACTIVE: high level state of the unit.
  • SUB: low level state of the unit. An active unit can be in the running state or exited state. This value depends on the service type.

As you can see, you could list the loaded services on your Linux system. But an active systemd service could be running or could be exited (after running successfully).

List all the running systemd services

The active state can also have a sub-status like running, exited etc. You can use the same --state flag with the sub-state.

To list the running systemd services, use the --state=running flag like this:

systemctl list-units --type=service --state=running

Here's a sample output for my system showing some of the running systemd services:

  UNIT                        LOAD   ACTIVE SUB     DESCRIPTION                                                     
  accounts-daemon.service     loaded active running Accounts Service                                                
  acpid.service               loaded active running ACPI event daemon                                               
  avahi-daemon.service        loaded active running Avahi mDNS/DNS-SD Stack                                         
  bluetooth.service           loaded active running Bluetooth service                                               
  bolt.service                loaded active running Thunderbolt system service        

List all loaded systemd services including the inactive ones

By default, the systemctl command only displays the loaded and active units.

If you want to list all the loaded services including the inactive ones, use the --all flag:

systemctl list-units --all --type=service

You can now see even the inactive services:

  UNIT                                                  LOAD      ACTIVE   SUB     DESCRIPTION                                                                     
  accounts-daemon.service                               loaded    active   running Accounts Service                                                                
  acpid.service                                         loaded    active   running ACPI event daemon                                                               
  alsa-restore.service                                  loaded    active   exited  Save/Restore Sound Card State                                                   
  alsa-state.service                                    loaded    inactive dead    Manage Sound Card State (restore and store)                                     
  anacron.service                                       loaded    inactive dead    Run anacron jobs                                                                
  apparmor.service                                      loaded    active   exited  Load AppArmor profiles 

List all the inactive systemd services

If you want to see only the inactive services, you can combine various flags like --all and --state like this:

systemctl list-units --all --type=service --state=inactive

As you can see in the output, it displays all the inactive systemd services:

  UNIT                                   LOAD      ACTIVE   SUB  DESCRIPTION                                                                     
  alsa-state.service                     loaded    inactive dead Manage Sound Card State (restore and store)                                     
  anacron.service                        loaded    inactive dead Run anacron jobs                                                                
  apport-autoreport.service              loaded    inactive dead Process error reports when automatic reporting is enabled                       
  apt-daily-upgrade.service              loaded    inactive dead Daily apt upgrade and clean activities                                          
  apt-daily.service                      loaded    inactive dead Daily apt download activities                                                   
● auditd.service                         not-found inactive dead auditd.service                              

List all the installed systemd services (even if they are not loaded)

Every systemd unit, be it service or socket or any other unit, has a unit file which

systemctl list-unit-files --type=service

Here's what you should see:

UNIT FILE                                  STATE           VENDOR PRESET
accounts-daemon.service                    enabled         enabled      
acpid.service                              disabled        enabled      
alsa-restore.service                       static          enabled      
alsa-state.service                         static          enabled      
alsa-utils.service                         masked          enabled      
anacron.service                            enabled         enabled      
apparmor.service                           enabled         enabled      
apport-autoreport.service                  static          enabled      
apport-forward@.service                    static          enabled     

Explaining each state type will be too lengthy and is not in the scope of this article. Maybe I'll write about it in the future.

List all systemd services that will be run at each boot automatically

To see all the systemd services that will run automatically every time your system boots, use this command:

systemctl list-unit-files --type=service --state=enabled

Are you confused with the enabled state? That's normal. Many new user confuse an enabled system service with a running service.

However, an enabled systemd service means that the service will be activated automatically when the system boots.

UNIT FILE                                  STATE   VENDOR PRESET
accounts-daemon.service                    enabled enabled      
anacron.service                            enabled enabled      
apparmor.service                           enabled enabled      
autovt@.service                            enabled enabled      
avahi-daemon.service                       enabled enabled      
binfmt-support.service                     enabled enabled      
bluetooth.service                          enabled enabled      
console-setup.service                      enabled enabled      
containerd.service                         enabled enabled      
cron.service                               enabled enabled      
cups-browsed.service                       enabled enabled      
cups.service                               enabled enabled      
dbus-fi.w1.wpa_supplicant1.service         enabled enabled      

Do you notice the Vendor Preset? It was also present in the previous example.

Vendor preset defines the automatic behavior of the systemd unit when a program is installed.

Suppose you installed a new program XYZ. This XYZ has a systemd service called xyz.service with vendor preset enabled. This means that after installing the program, when you boot the system, this xyz.service will be activated automatically at the boot time.

If the vendor preset is disabled, you'll have to manually set it to enable. Once it is enabled, it starts automatically each boot.

sudo systemd enable xyz.service

Display the status of a particular systemd service

So far, you have seen various ways of listing services. But nothing focuses on a single service.

You can get detailed information on a systemd service using the status sub-command of systemctl. Tab completion works with this command.

systemctl status <service_name>

Here's an example with the network manager service:

abhishek@itsfoss:~$ systemctl status NetworkManager.service 
● NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-07-23 08:12:44 IST; 3h 8min ago
       Docs: man:NetworkManager(8)
   Main PID: 711 (NetworkManager)
      Tasks: 3 (limit: 9157)
     Memory: 13.6M
     CGroup: /system.slice/NetworkManager.service
             └─711 /usr/sbin/NetworkManager --no-daemon

Jul 23 08:12:50 itsfoss NetworkManager[711]: <info>  [1595472170.7159] device (wlp58s0): Activation: successful, device activated.
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info>  [1595472170.7179] manager: startup complete
Jul 23 08:12:51 itsfoss NetworkManager[711]: <info>  [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds)
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers   => 'fe80::a8dc:79ff:fe1b:57fe'
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info>  [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound
Jul 23 08:12:59 itsfoss NetworkManager[711]: <info>  [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1>
Jul 23 11:18:10 itsfoss NetworkManager[711]: <info>  [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE
Jul 23 11:18:11 itsfoss NetworkManager[711]: <info>  [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL

You can see that it provides plenty of useful information like the state of the service, man page of the service, memory it consumes, process id etc. It also shows the last few journald logs for the service.

If you want to check whether a service is active or not in a shell script, you can use the is-active sub-command. The output is 0 for active.

systemctl is-active application.service

Similarly, if you want to check whether a service is enabled (set to start automatically at boot time), you can use is-enabled sub-command. Output is 0 for enabled service.

systemctl is-enabled application.service

Conclusion

I think you now have a better understanding on listing systemd services. I do hope you learned a few new things about systemd and systemctl command.

Don't hesitate to provide your feedback, questions or suggestions in the comment section.