646

How can I list all enabled services from systemctl?

I know running systemctl command by itself lists all services, but I would like to only get the enabled ones.

rogerdpack
  • 1,029
oceanBT
  • 6,697
  • 4
  • 13
  • 12

10 Answers10

837

systemctl list-unit-files | grep enabled will list all enabled ones.

If you want which ones are currently running, you need systemctl | grep running.

Use the one you're looking for. Enabled, doesn't mean it's running. And running doesn't mean it's enabled. They are two different things.

Enabled means the system will run the service on the next boot. So if you enable a service, you still need to manually start it, or reboot and it will start.

Running means it's actually running right now, but if it's not enabled, it won't restart when you reboot.

Delorean
  • 11,563
209

man systemctl states:

--state=

The argument should be a comma-separated list of unit LOAD, SUB, or ACTIVE states. When listing units, show only those in the specified states. Use --state=failed to show only failed units.

Explanation:

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.

Though you can also use this to only show enabled units with:

systemctl list-unit-files --state=enabled

If a unit is enabled that means that the system will start it on startup. Though setting something to enabled doesn't actually also start it so you will need to do that manually, or reboot the system after setting it to enabled.

108

To list all the systemd service which are in state=active and sub=running

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

To list all the systemd serice which are in state=active and sub either running or exited

systemctl list-units --type=service --state=active
Pablo Bianchi
  • 17,371
23

To see 'enabled' services including these that are still under upstart/init run:

systemctl list-unit-files --type service --state enabled,generated

To see all of the currently running services run:

systemctl list-units --type service --state running
Stephen Rauch
  • 1,156
  • 6
  • 15
  • 21
nix-power
  • 361
15

There is a good GUI application called Stacer where you can manage all the services.

enter image description here

Check its Github link Stacer Github
Also check Web for more info

yathomasi
  • 326
10

Also overview of all active and failed services:

systemctl list-units --type service --state running,failed
panticz
  • 1,936
7

In addition to the current answers, I use the following to get just the names of the services:

systemctl list-units --type=service --state=active,running | awk '/.*\.service/ {print $1}'

Rather than the tabular format, this makes it easier to pipe just those services to another program

smac89
  • 1,085
3

This for me has been the fastest way to check my running or failed services that are supposed to be enabled. With this, I know I do not have to run:

sudo shutdown -r now

I just use most of the above with comma separation on state:

systemctl list-units --type=service --state=running,enabled,failed,generated
Eamonn Kenny
  • 230
  • 2
  • 4
2

What about systemctl unit templates?

To list also templated units, you might want to use:

systemctl list-units --all|grep yourservice

The --all switch shows also all units which have been instantiated with

systemctl <service_name>@<argument>.service

From the man page:

When listing units with list-units, also show inactive units and units which are following other units. When showing unit/job/manager properties, show all properties regardless whether they are set or not.

Example:

systemctl openvpn@my_office_endopoint.service

Further reading: https://fedoramagazine.org/systemd-template-unit-files/

1

To list user otheruser's active user services:

sudo runuser -l otheruser-c "systemctl --user list-units --type=service --state=active"
Abdull
  • 734