How do I list running services on Linux?

I’m trying to troubleshoot some issues on my Linux server and need to see a list of all running services. Can anyone advise on the commands or tools I should use to get this information? Your help would be greatly appreciated!

You can list running services in Linux using a few different commands or tools, depending on what exactly you’re looking for and which Linux distribution you’re using. Here’s a rundown of some common methods:

  1. systemctl: On many modern Linux distributions that use systemd (like Ubuntu, Fedora, and Debian-based systems), you can use systemctl:

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

    This will give you a list of all currently running services. If you want to see all services, whether running or not, you can use:

    systemctl list-units --type=service
    
  2. service command: On some older distributions or those that use init.d, you can use the service command:

    service --status-all
    

    This will list all services, with + indicating running services and - indicating stopped services.

  3. ps command: If you need a more granular level of detail and want to see all running processes, the ps command is your friend:

    ps -ef | grep service-name
    

    Replace service-name with the name of the service you’re interested in.

  4. htop or top: For a more interactive approach, htop or top can be used to view all running processes and their status. htop is more user-friendly but might need to be installed:

    sudo apt-get install htop
    htop
    

One thing to keep in mind is that some services might run under user-level daemons, especially newer applications which can be a bit trickier to track down.

Personally, I always start with systemctl since most distributions nowadays are using systemd, and it gives a pretty comprehensive overview. But don’t ignore the ps command—it can reveal if a service started via an unusual method.

Lastly, knowing your specific distribution can help tailor these commands more precisely to your setup. It’s also a good idea to check logs if you are troubleshooting specific issues, as they can give you more detailed information about what might be failing. For systemd systems, journalctl can be very useful:

journalctl -u service-name

Good luck with the troubleshooting!

Honestly, I think systemctl is overkill for most people. Sure, it works on most modern distributions, but it’s bloated and not that intuitive. If your server is anything other than a fresh install of the latest Ubuntu or Fedora, you might run into quirks or unexpected behavior.

For something straightforward and less prone to issues, consider using chkconfig or netstat.

  1. chkconfig - Although it’s more common in Red Hat-based systems like CentOS, it can be quite straightforward:

    chkconfig --list | grep '3:on'
    

    This will show all the services set to start in runlevel 3. However, be aware that chkconfig might be phased out in the latest systems.

  2. netstat - If you’re troubleshooting network-related services, use netstat for a quick check of open ports which services are tied to:

    netstat -tuln
    

    Yes, netstat is somewhat deprecated in favor of ss, but many still find it more convenient.

Lastly, when you need a visual and comprehensive tool but don’t want to hassle with installations or configurations, you can use lsof to list open files and socket connections which often correlate with running services:

lsof -i -P -n

For those still reliant on ps or top, just be aware that they give gobs of data, most of which is irrelevant if you’re looking for running services specifically. It’s like using a sledgehammer to crack a nut—inefficient and over the top.

And watch out for interactive tools like htop. While they are user-friendly, they’re also overhyped. They can be heavy on your terminal sessions and could mislead you into thinking something’s wrong just because it looks busy.

Bottom line: don’t get tangled up with overly complex tools if simpler ones suffice for your needs.

While both @techchizkid and @codecrafter mentioned several ways to list running services, I think there’s more to explore, especially if you’ve already used systemctl or service --status-all and need additional insights.

First off, I noticed ss was mentioned briefly but I think it deserves more attention. In many cases, it’s more effective than netstat for network-related services:

ss -tuln

This command lists all TCP and UDP sockets that are currently listening. It can be extremely useful if you’re dealing with network daemons and want to see what’s active.

If you’re running a more complex system and need a deeper dive, consider using nmap for scanning open ports and running services across your network. It’s external but powerful for a comprehensive breakdown:

sudo nmap -sT -O localhost

For those who like minimalism, instead of using the heavier htop, atop might be an alternative. atop can give you detailed insights without the extra load:

sudo apt-get install atop
atop

Unlike htop, atop logs system data, allowing historical analysis—a hidden gem when you’re troubleshooting performance issues retrospectively.

For more granular service analysis, especially if you’re dealing with user-level services, you might also want to explore these commands:

launchctl list  # On macOS, for reference

While this applies to macOS, it gives an idea. For Linux, systemd-run can create transient units which are not immediately obvious in systemctl listings. Investigating transient units can reveal unexpected services:

systemctl list-units --type=service | grep transient

Sometimes, troubleshooting calls for browsing service logs detailed in journalctl. For a more specific filter:

journalctl -xe

This command focuses on the most recent logs and might pinpoint why a service isn’t running correctly.

In terms of system monitoring tools, it’s good to push boundaries. If you need a tool more tailored to your server’s specific distribution, consider distro-specific package managers and service managers. For instance, while less common, systems like Alpine Linux use openrc:

rc-status

And if exploring deeper contextual service analysis:

rc-service serviceName status

Some users overlook /proc as it’s a goldmine for direct kernel and process stats reading. For an overview of all running processes tied to network services, this might be illustrative:

cat /proc/net/tcp

This direct method can sometimes give insights missed by conventional utilities.

Lastly, understanding which services automatically start on boot can be fundamental for troubleshooting. With systemd, you can use:

systemctl list-unit-files --type=service | grep enabled

For distributions using chkconfig, as suggested, although it’s falling out of favor, comprehending runlevel scripts may be beneficial.

It’s also prudent to occasionally audit user crontabs and timers, which might silently start applications or services. The following command can list all crontabs across users:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

With systemd timers becoming more popular, their listing and states might reveal such automated services:

systemctl list-timers

And note, many advisory services or local tools might be hiding unnecessary complexity. Staying concise with efficient commands may often yield quicker, cleaner results.

Bottom line, while systemctl and service offer robust solutions by handling init.d scripts and systemd units, exploring further into network sockets, custom automation scripts, and distribution-specific tools can supplement the troubleshooting process. Don’t get deterred by the perceived simplicity of concise tools—they often provide the fastest route to a clear, actionable insight of your running services landscape.