GICT knowledge base
How to Use systemctl for Startup Management in Linux
Published
Startup management is an essential part of keeping your Linux system efficient, secure, and tailored to your needs. Most modern Linux distributions use systemd as the default init system, and systemctl is the primary tool you use to control which services start at boot, which ones stay disabled, and how services behave throughout your system’s lifecycle. Mastering systemctl allows you to optimize performance, reduce security risks, and ensure that only the necessary services run in the background.
This guide explains in detail how you can use systemctl to manage startup processes on your Linux system. You will find information on enabling and disabling services, checking their status, troubleshooting issues, and best practices for managing startup.
Prerequisites
- Access to a Linux system that uses systemd (most popular distributions, including Ubuntu, Debian, Fedora, CentOS, RHEL, Arch, and derivatives)
- Terminal or shell access
- Sudo (administrator) privileges for most commands
What Is systemctl?
systemctl is the main command-line tool for interacting with systemd, the service manager. It allows you to:
- Enable services to start automatically at boot
- Disable services to prevent them from starting at boot
- Start or stop services immediately
- View the status of services
- Mask and unmask services for advanced control
- Manage user-specific services
Why Manage Services at Startup?
Managing which services start at boot is important for several reasons:
- Performance: Fewer services running at startup means faster boot times and less resource usage.
- Security: Disabling unnecessary services reduces your system’s attack surface.
- Troubleshooting: Controlling startup services helps isolate problems and optimize system behavior.
- Customization: You decide which background tasks are essential for your workflow.
How to Enable a Service to Start at Boot
When you enable a service, systemd creates a symbolic link for the service unit in the appropriate multi-user.target.wants directory. This causes the service to start automatically during system boot.
To enable a service so it starts at every boot:
sudo systemctl enable servicename
Replace servicename with the actual service name, such as ssh, nginx, or cups.
If you want the service to start immediately as well:
sudo systemctl start servicename
Example: Enable and start the SSH server for remote access.
sudo systemctl enable ssh
sudo systemctl start ssh
How to Disable a Service from Starting at Boot
Disabling a service stops it from launching automatically at boot, but does not stop a currently running service.
To disable a service:
sudo systemctl disable servicename
To stop the service immediately:
sudo systemctl stop servicename
Example: Disable and stop the Bluetooth service.
sudo systemctl disable bluetooth
sudo systemctl stop bluetooth
Warning: Disabling critical services like networking or system logging can make your system unstable or inaccessible. Research a service before disabling it.
Check If a Service Is Enabled or Disabled
You can easily check whether a service is set to start at boot.
systemctl is-enabled servicename
The output will be enabled, disabled, static, indirect, or masked.
List All Service Startup States
To view all system services and their enablement status:
systemctl list-unit-files --type=service
This table shows which services are enabled, disabled, static, or masked.
Check Which Services Are Running
To see which services are currently running:
systemctl list-units --type=service --state=running
This helps you review active background processes and troubleshoot startup.
Mask and Unmask Services for Advanced Control
Masking a service creates a link that prevents any process (even root) from starting that service automatically or manually.
To mask a service:
sudo systemctl mask servicename
To unmask it:
sudo systemctl unmask servicename
Masking is useful for completely deactivating problematic or unwanted services.
Manage User Services
Some services run within a user session. You can manage these with the --user flag (no sudo needed):
Enable a user service at login:
systemctl --user enable servicename
systemctl --user start servicename
Disable or stop a user service:
systemctl --user disable servicename
systemctl --user stop servicename
Note: User services are defined in ~/.config/systemd/user/. They are separate from system-wide services.
Troubleshooting Startup Services
If a service fails to start at boot:
- Check its status and logs:
systemctl status servicename - Review the output for error messages.
- View detailed logs:
journalctl -u servicename - If you made changes to service files, reload systemd to update its configuration:
sudo systemctl daemon-reload
Best Practices for Startup Management
- Enable only essential services to minimize resource usage and security risks.
- Disable and mask unused or unnecessary services to reduce boot time and vulnerabilities.
- Regularly review running services to catch changes after software updates or new installations.
- Document changes you make to startup services, especially on production or shared systems.
- Test system behavior after changes to confirm that critical functionality is unaffected.
Example Scenarios
Enable a Web Server on Startup
If you install Apache or Nginx and want it to start at every boot:
sudo systemctl enable apache2 # Ubuntu/Debian
sudo systemctl enable nginx # Fedora/CentOS/Arch
Disable Printing Services on a Headless Server
If your Linux server does not use printers, disable the printing service:
sudo systemctl disable cups
sudo systemctl stop cups
List Failed Services After Boot
To check for services that failed to start:
systemctl --failed
Additional Commands for Fine-Tuning
- Check the order of service startup:
systemctl list-dependencies - Re-enable a service after disabling:
sudo systemctl enable servicename - See a service’s detailed configuration:
systemctl cat servicename
Conclusion
Managing startup services with systemctl is a powerful way to control your Linux system’s behavior, security, and performance. You can enable, disable, start, stop, and mask services to fit your needs, and you can troubleshoot issues using systemd’s logging and status tools. By mastering these commands, you keep your system lean, responsive, and reliable-no matter your use case.
Related guides
How to Set Up zram on a Small VPS
Configure zram on Ubuntu with kernel and swap checks. Understand compressed memory limits, monitor real use and avoid unsafe swap-file changes.
LinuxHow to Find Services That Need a Restart After Updates with needrestart
Find services using outdated libraries with needrestart on Ubuntu. Read restart reports, review automatic restart policy and plan maintenance safely.
LinuxHow to Limit a Linux Service’s Memory with systemd
Limit a Linux service with systemd MemoryHigh, MemoryMax and swap controls. Check cgroup support, diagnose pressure and remove only your own policy.
LinuxHow to Protect SSH with CrowdSec on Ubuntu
Protect SSH with CrowdSec on Ubuntu. Connect log detection to firewall enforcement and test temporary blocking without losing administrator access.
