399

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.

  • what do you mean by enabled? You mean services that are running? – Gen Jul 5 '16 at 18:28
  • 11
    @Gen enabling a service is quite different from starting it. See man systemctl. – Jos Jul 5 '16 at 18:35
  • 3
    Fascinating. The lowest rated answer is the most "correct" answer, even though it is clearly not the best answer. This excellent question (and its answers) is an interesting example of how systemd violates the long-standing (and brilliant) design principles of Unix & Co. @FelipeAlvarez complains that the most-accepted answer assumes systemd follows the unix design philosopy, but systemd/systemctl can do exactly what he wants (most experienced users will just consider that complete bloat). I begin to see more clearly why Linus Torvalds is so vehemently critical of systemd. – BISI Dec 13 '18 at 18:20
565

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.

| improve this answer | |
  • 7
    annoying to have to use an external tool (grep) to show this vital information. But thank you for showing us the way :) – Felipe Alvarez Feb 15 '17 at 2:43
  • 41
    @FelipeAlvarez Correct. But that's how Linux works. Many small binaries that work well with each other. systemctl does what is asked, it lists services. There is no filtering command built-in to systemctl because grep already exists and can do that well with any program's output. It's how it's always been :) – Dorian Feb 16 '17 at 16:01
  • 7
    I agree and so it should be. But, systemd already tries to do SO much that I wonder why it can't list enabled services? – Felipe Alvarez Feb 18 '17 at 0:45
  • 6
    systemctl | grep running do not list anything to me! Even if something is running is only listed as for his status like: enabled, disabled, masked, static – Cirelli94 Apr 13 '17 at 10:34
  • 36
    Simpler: systemctl list-unit-files --state=running – Will Sep 2 '17 at 10:40
138

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.

| improve this answer | |
  • 8
    To enable and start at the same time: systemctl enable --now ... – Aurélien Ooms Jul 29 '17 at 20:24
  • 1
    --state=enabled has no effect on systemd version 215 (on Raspbian 8 Jessie), but it does work on systemd version 229 (on Ubuntu 16.04.03 Xenial). – mpb Dec 17 '17 at 22:15
  • @mpb: But yet it works perfectly fine on version 235 on Arch Linux. – user364819 Dec 17 '17 at 23:07
72

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
| improve this answer | |
17

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
| improve this answer | |
  • Unfortunately the names of the services can be different in the two lists - e.g. sshd vs. ssh and syslog vs. rsyslog. – OrangeDog Jan 11 '19 at 18:35
  • The only "non grep" right answer. Though not sure why upstart is mentioned... – rogerdpack Jul 5 '19 at 16:53
8

Also overview of all active and failed services:

systemctl list-units --type service --state running,failed
| improve this answer | |
5

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

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.