What is systemctl?
In modern Linux distributions like Ubuntu, Debian, and CentOS, the systemd system and service manager is responsible for bootstrapping the user space and managing system processes after booting. The primary command-line tool used to control systemd and its associated services is systemctl.
Whether you are running a web server (like Apache or Nginx), a database (like MySQL or PostgreSQL), or managing background network tasks, understanding how to use systemctl is essential for any Linux administrator.
Why You Need to Learn systemctl
Before systemd became the standard, administrators used init.d scripts and the service command. While those older commands sometimes still work as aliases, systemctl provides a much more powerful, consistent, and verbose way to manage background daemons. Mastering it allows you to start applications on boot, restart crashed services, and diagnose failure reasons through detailed status logs.
Essential systemctl Commands
Below are the most critical systemctl commands you will need for daily Linux administration. In these examples, replace <service_name> with the actual name of the service (for example, nginx, apache2, or ssh).
1. Checking the Status of a Service
Before making any changes, it is best practice to check what the service is currently doing. This command will tell you if the service is running, stopped, or if it has encountered an error, and will often display the last few lines of its log output.
sudo systemctl status <service_name>
2. Starting and Stopping Services
To manually start a service that is currently stopped:
sudo systemctl start <service_name>
To stop a service that is currently running:
sudo systemctl stop <service_name>
3. Restarting and Reloading Services
If you have made a configuration change to an application (like editing an Nginx server block), you need to tell the service to apply the new configuration.
A full restart stops the service entirely and starts it again. This will briefly interrupt the service:
sudo systemctl restart <service_name>
A safer alternative, if the application supports it, is a reload. This applies the new configuration without dropping active connections:
sudo systemctl reload <service_name>
If you are unsure whether the service supports reloading, you can use:
sudo systemctl reload-or-restart <service_name>
4. Enabling Services to Start on Boot
Starting a service manually means it will stop running if the server reboots. To ensure a service launches automatically when the server turns on, you must enable it:
sudo systemctl enable <service_name>
If you want to prevent a service from starting on boot:
sudo systemctl disable <service_name>
How to List All Active Services
Sometimes you need to see exactly what is running on your server. You can list all active, loaded services by running:
systemctl list-units --type=service --state=running
This provides a clean, easily readable table of every active daemon.
Common Troubleshooting Mistakes
- Forgetting
sudo: Mostsystemctlcommands require root privileges. If you try to start or stop a service withoutsudo, you will be prompted for an authentication password, which can break automation scripts. - Confusing restart and reload: Always prefer
reloadfor production web servers. Usingrestartwill disconnect active users.
Next Steps
Once you are comfortable managing individual services, the next step in mastering systemd is learning how to read the unified logs using the journalctl command, which pairs perfectly with systemctl for advanced troubleshooting.