Managing a service with systemctl is the control point for bringing a daemon online, taking it down for maintenance, or applying configuration changes without guessing what systemd thinks the unit is doing right now.

On a systemd host, each service unit has a runtime state such as active or inactive and a separate unit-file state such as enabled or disabled. systemctl status shows the human-readable runtime view with recent journal lines, while verbs such as start, stop, restart, reload, enable, and disable change either the running process, the boot-time symlinks, or both.

Examples below use a generic queue-worker.service unit name to keep the command flow readable. Replace it with the real unit name on the host, add sudo for system services, and use systemctl --user instead when managing a per-user service. A service reload only works when the unit actually supports reloading its own application configuration, and changing the unit file itself still requires systemctl daemon-reload.

ActionExample command
Show human-readable status systemctl status –no-pager –full unit.service
Start a stopped service systemctl start unit.service
Stop a running service systemctl stop unit.service
Restart a service systemctl restart unit.service
Reload service configuration systemctl reload unit.service
Enable and start at boot systemctl enable –now unit.service
Disable and stop now systemctl disable –now unit.service
Check script-friendly state systemctl is-active unit.service
systemctl is-enabled unit.service

Steps to manage a systemd service using systemctl:

  1. Open a terminal on the host that runs systemd.
  2. Inspect the current runtime status before changing the service state.
    $ systemctl status --no-pager --full queue-worker.service
    * queue-worker.service - Queue Worker Service
         Loaded: loaded (/etc/systemd/system/queue-worker.service; enabled; preset: enabled)
         Active: active (running) since Mon 2026-04-13 09:10:28 UTC; 1s ago
        Process: 236 ExecReload=/bin/kill -USR1 $MAINPID (code=exited, status=0/SUCCESS)
       Main PID: 233 (queue-worker.sh)
          Tasks: 2 (limit: 14335)
         Memory: 516.0K (peak: 2.1M)
            CPU: 4ms
    ##### snipped #####

    Replace queue-worker.service with the actual unit name, such as nginx.service, ssh.service, or docker.service. The Loaded: line shows the unit file path and enablement state, while Active: shows the current runtime state.

  3. Start the service when it is installed but not currently running.
    $ sudo systemctl start queue-worker.service
    
    $ systemctl is-active queue-worker.service
    active

    start activates the unit immediately, but it does not change whether the service starts automatically on the next boot.

  4. Stop the service when maintenance or troubleshooting requires the daemon to go fully inactive.
    $ sudo systemctl stop queue-worker.service
    
    $ systemctl is-active queue-worker.service
    inactive

    Stopping a service can interrupt clients, timers, sockets, or dependent units that expect it to stay available.

  5. Restart the service when the process must be recycled instead of asked to reread configuration in place.
    $ sudo systemctl restart queue-worker.service
    
    $ systemctl status --no-pager --full queue-worker.service
    * queue-worker.service - Queue Worker Service
         Loaded: loaded (/etc/systemd/system/queue-worker.service; enabled; preset: enabled)
         Active: active (running) since Mon 2026-04-13 09:10:43 UTC; 3ms ago
    ##### snipped #####

    The current upstream systemctl documentation notes that restart stops and starts the unit, and that an explicit stop followed by start is safer when the service must be fully torn down before it returns.

  6. Check whether the unit supports a live reload before using the reload action.
    $ systemctl show -p CanReload queue-worker.service
    CanReload=yes

    When CanReload=no, systemctl reload unit.service fails with a message such as Job type reload is not applicable for unit ..., which is common for services that do not implement an in-place reload path.

  7. Reload the service when the unit supports it and only the application's own configuration needs to be reread.
    $ sudo systemctl reload queue-worker.service
    
    $ systemctl status --no-pager --full queue-worker.service
    * queue-worker.service - Queue Worker Service
         Loaded: loaded (/etc/systemd/system/queue-worker.service; enabled; preset: enabled)
         Active: active (running) since Mon 2026-04-13 09:10:28 UTC; 1s ago
        Process: 236 ExecReload=/bin/kill -USR1 $MAINPID (code=exited, status=0/SUCCESS)
    ##### snipped #####

    systemctl reload asks the service process to reread its own configuration. It does not make systemd reread the unit file, so unit-file and drop-in changes still need sudo systemctl daemon-reload.

  8. Disable the service and stop it immediately when it should not stay running or start automatically at boot.
    $ sudo systemctl disable --now queue-worker.service
    Removed "/etc/systemd/system/multi-user.target.wants/queue-worker.service".
    
    $ systemctl is-enabled queue-worker.service
    disabled
    
    $ systemctl is-active queue-worker.service
    inactive

    disable removes the service's install symlinks, and --now adds the stop action in the same command.

    When a unit is static, it has no install rules of its own and cannot be enabled or disabled directly.

  9. Enable the service and start it immediately when it should come up now and on later boots.
    $ sudo systemctl enable --now queue-worker.service
    Created symlink /etc/systemd/system/multi-user.target.wants/queue-worker.service -> /etc/systemd/system/queue-worker.service.
    
    $ systemctl is-enabled queue-worker.service
    enabled
    
    $ systemctl is-active queue-worker.service
    active

    Current upstream systemctl behavior keeps enablement and activation separate, so --now is the shortest way to change both at once.

  10. Review the recent journal when a lifecycle command reports a failure or the service falls back to failed.
    $ sudo journalctl -u queue-worker.service -n 10 --no-pager
    Apr 13 09:10:28 server systemd[1]: Started queue-worker.service - Queue Worker Service.
    Apr 13 09:10:28 server systemd[1]: Reloading queue-worker.service - Queue Worker Service.
    Apr 13 09:10:28 server systemd[1]: Reloaded queue-worker.service - Queue Worker Service.

    systemctl status already shows a few recent lines, but journalctl -u is the cleaner follow-up when the reason for a failed start, stop timeout, or broken reload is not obvious.