Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose 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
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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
Raspberry SC15184 Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (2GB)
  • 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
  • -u limits entries to the named unit.
  • -b limits the view to the current boot, which removes older failures from the immediate diagnosis.
  • -f follows new entries live; it is useful in one terminal while restarting the service in another.

A reliable failure-troubleshooting workflow

  1. Check state and definition. Run sudo systemctl status NAME.service. Read both Loaded: and Active:, including the recent messages.
  2. Focus the logs. Run sudo journalctl -u NAME.service -b. For a live retry, add -f.
  3. Refresh edited definitions. If the unit file or a drop-in changed, run sudo systemctl daemon-reload before retrying.
  4. Retry the intended operation. Use start for an inactive service, restart for a full process replacement, or the service’s supported reload operation for configuration-only changes.
  5. 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.
  6. Confirm scope. Make sure you are addressing the system manager with sudo systemctl or the per-user manager with systemctl --user. A healthy unit in one scope is unrelated to a missing unit in the other.

Safe operating patterns

Apply a unit-file edit

  1. Edit the unit or drop-in using your normal editor.
  2. Run sudo systemctl daemon-reload.
  3. Run sudo systemctl restart example.service if the running process must use the new definition.
  4. Run sudo systemctl status example.service and 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

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
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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

Bestseller No. 1
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$259.95
Bestseller No. 2
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
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
$159.99
Bestseller No. 4
Raspberry SC15184 Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (2GB)
Raspberry SC15184 Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (2GB)
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
$87.98
Bestseller No. 5
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
Includes Raspberry Pi 5 16GB with 2.4Ghz 64-bit quad-core CPU (16GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$419.99

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.