Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Use systemctl to control a systemd service’s current state, boot-time enablement, and configuration reloads. The essential pattern is sudo systemctl <verb> NAME.service: use start, stop, or restart for runtime changes; enable for automatic activation; reload for an application’s own configuration; and daemon-reload after changing a unit file. When something fails, pair systemctl status with journalctl -u.
systemctl at a glance
systemctl is the command-line client for a systemd manager. Services are only one unit type; systemd also manages sockets, targets, timers, mounts, paths, devices, swap units, and slices. A unit name normally ends in a type suffix such as .service, although systemctl can often infer it.
| Goal | Command | What it changes |
|---|---|---|
| Check state | sudo systemctl status ssh.service |
Displays loaded state, active state, and recent journal context. |
| Start now | sudo systemctl start ssh.service |
Activates the unit for the current system manager session. |
| Stop now | sudo systemctl stop ssh.service |
Deactivates it; another dependency or trigger may start it again. |
| Restart | sudo systemctl restart ssh.service |
Stops and starts it, including starting it if it was not running. |
| Reload application configuration | sudo systemctl reload ssh.service |
Asks the service process to reread its own configuration. |
| Reread unit definitions | sudo systemctl daemon-reload |
Makes systemd reread changed unit files and drop-ins. |
| Enable at boot | sudo systemctl enable ssh.service |
Creates installation links for future activation; it does not start the service now. |
| Enable and start | sudo systemctl enable --now ssh.service |
Requests persistent enablement and immediate activation together. |
| Disable boot activation | sudo systemctl disable ssh.service |
Removes enablement links; an already-running process may continue. |
| Read service logs | sudo journalctl -u ssh.service |
Filters journal entries to that unit. |
Before changing a service
Identify the exact unit
Use the distribution’s unit name, including its instance suffix when applicable (for example, [email protected]). A mistyped name produces a “unit not found” error rather than changing another service. If you are unsure which manager owns it, first decide whether it is a system service or a per-user service.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallChoose the manager scope
sudo systemctl ... talks to the system manager and normally requires administrative privileges. systemctl --user ... talks to your per-user manager, sees user units, and uses your user’s permissions and unit search paths. A user manager’s lifetime and targets are tied to the login/session configuration, so a command that works in one scope cannot be assumed to affect the other.
#1 Best Overall
- Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
- Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
- CanaKit Turbine Black Case for the Raspberry Pi 5
- CanaKit Low Noise Bearing System Fan
- Mega Heat Sink - Black Anodized
Start, stop, and restart a service
Start it for the current boot
sudo systemctl start example.service
Starting changes runtime state only. It does not create boot-time enablement. Check the result immediately with sudo systemctl status example.service; the Active: line should show whether the process is running or failed.
Stop it cleanly
sudo systemctl stop example.service
Stopping deactivates the unit, but a socket, timer, dependency, or other trigger can activate it again. If it returns unexpectedly, inspect the unit’s relationships and the journal rather than repeatedly issuing stop.
Restart after a runtime change
sudo systemctl restart example.service
Restart performs a stop followed by a start. It also starts a unit that was already inactive, which makes it useful in deployment scripts when the desired end state is “running.” A restart interrupts the process, so use a reload when the application supports one and a full process replacement is unnecessary.
Rank #2
- Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
- Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
- CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
- CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
- CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)
Reload versus daemon-reload
reload: ask the application to reread its configuration
sudo systemctl reload example.service
This sends the service’s configured reload operation. For an HTTP server, that might reread an application configuration while keeping the main process alive. It only works when the unit and application provide a reload mechanism; it does not make systemd reread the unit file.
daemon-reload: reread systemd unit files
sudo systemctl daemon-reload
sudo systemctl restart example.service
Run this after editing /etc/systemd/system/example.service or one of its drop-ins. The first command updates systemd’s in-memory definition. It does not, by itself, restart the process or apply a changed environment to an already-running service; follow it with start or restart when the new definition should take effect immediately.
These operations affect different layers: reload is an application request, whereas daemon-reload is a manager operation. Confusing them is a common reason a changed unit appears to have no effect.
Enablement and boot behavior
Enable without starting
sudo systemctl enable example.service
Enablement creates the installation links that cause the unit to be pulled in by its configured target or another activation path. It changes future activation behavior, not the current process state. Therefore an enabled service can still be inactive until the next boot or an explicit start.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Enable and start in one command
sudo systemctl enable --now example.service
Use this when the service should both run immediately and remain enabled for subsequent boots. Verify both aspects with status and, where needed, the unit’s enablement state.
Disable future activation
sudo systemctl disable example.service
Disable removes the enablement links. It does not necessarily stop a process that is already running; use sudo systemctl disable --now example.service when you want to remove boot activation and stop the current instance together.
Rank #4
- Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1. 5GHz
- 2. 4 GHz and 5. 0 GHz IEEE 802. 11b/g/n/ac wireless LAN, Bluetooth 5. 0, BLE
- 2 × USB 3. 0 ports, 2 x USB 2. 0 Ports
- 2 × micro HDMI ports supproting up to 4Kp60 video resolution
- Micro SD card slot for loading operating system and data storage
Inspect status and logs
Read the status summary
sudo systemctl status example.service
The output combines the unit’s Loaded: information, its Active: state, process details, and recent journal lines. Typical states include loaded and active, inactive, or failed. Read the last messages before trying another command: they often name a missing executable, denied permission, invalid environment variable, failed dependency, or application-level configuration error.
Query the journal directly
sudo journalctl -u example.service
sudo journalctl -u example.service -b
sudo journalctl -u example.service -f
-ulimits entries to the named unit.-blimits the view to the current boot, which removes older failures from the immediate diagnosis.-ffollows new entries live; it is useful in one terminal while restarting the service in another.
A reliable failure-troubleshooting workflow
- Check state and definition. Run
sudo systemctl status NAME.service. Read bothLoaded:andActive:, including the recent messages. - Focus the logs. Run
sudo journalctl -u NAME.service -b. For a live retry, add-f. - Refresh edited definitions. If the unit file or a drop-in changed, run
sudo systemctl daemon-reloadbefore retrying. - Retry the intended operation. Use
startfor an inactive service,restartfor a full process replacement, or the service’s supportedreloadoperation for configuration-only changes. - Follow the first concrete error. An immediate exit can result from a wrong executable path, file permissions, missing environment variables, dependency failure, or an application error. The correct fix depends on the message in this unit’s journal; there is no universal restart command that repairs those causes.
- Confirm scope. Make sure you are addressing the system manager with
sudo systemctlor the per-user manager withsystemctl --user. A healthy unit in one scope is unrelated to a missing unit in the other.
Safe operating patterns
Apply a unit-file edit
- Edit the unit or drop-in using your normal editor.
- Run
sudo systemctl daemon-reload. - Run
sudo systemctl restart example.serviceif the running process must use the new definition. - Run
sudo systemctl status example.serviceand inspect the journal for the resulting state.
Prefer the least disruptive operation
- Use reload when only the application configuration changed and the service documents a reload action.
- Use restart when the process must be replaced or the service has no usable reload operation.
- Use daemon-reload only for systemd definition changes; it is not a substitute for either application reload or process restart.
Account for dependencies and triggers
A stop can be followed by an automatic start when another unit activates the service. A service that exits immediately may be behaving correctly from systemd’s perspective while reporting an application error in the journal. Diagnose the dependency chain and the first logged failure instead of assuming that repeated starts will help.
Or skip the browser setup
If you are documenting service operations and need clean screenshots of a status page, terminal dashboard, or runbook, ScreenshotNeo can capture a URL with one request. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and whether it was billed. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
See the ScreenshotNeo API documentation for all options. A direct capture looks like this:
Best Value
- Includes Raspberry Pi 5 16GB with 2.4Ghz 64-bit quad-core CPU (16GB RAM)
- Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
- CanaKit Turbine Black Case for the Raspberry Pi 5
- CanaKit Low Noise Bearing System Fan
- Mega Heat Sink - Black Anodized
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python:
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js:
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan. Create a free ScreenshotNeo account.
Frequently Asked Questions
What does a failed systemd service mean?
It means the manager attempted activation and the unit entered a failed state; the specific cause is recorded in the unit status and journal, so diagnose the first concrete error rather than treating “failed” as a single fault.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Why can a service be enabled but inactive?
Enablement defines future activation through install links, while starting changes the current runtime state. They are independent operations; use enable --now when you need both immediately.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

