The systemctl reload-or-restart command is the practical middle ground after a service configuration change when a live reload is preferred but the unit might only support a full restart. It keeps routine maintenance, deploy hooks, and manual admin work on one lifecycle verb instead of branching on reload support first.
On a systemd host, reload-or-restart asks the unit to reload its own application configuration when the service exposes a reload path, and otherwise stops and starts the unit. Inactive units are started too, so the follow-up check needs to confirm whether the service stayed on the same main process or came back with a fresh start.
This action does not make systemd reread the unit file itself. Run daemon-reload first after editing a unit file or drop-in under /etc/systemd/system, add sudo for system services, use systemctl –user for per-user units, and switch to try-reload-or-restart when stopped units must remain stopped.
$ systemctl show -p ActiveState -p SubState -p CanReload nginx.service ActiveState=active SubState=running CanReload=yes
Replace nginx.service with the real unit name on the host. When CanReload=no, systemctl reload-or-restart uses the restart path instead of an in-place reload.
$ sudo systemctl reload-or-restart nginx.service
Use systemctl --user reload-or-restart unit.service for a per-user unit instead of the system manager command. If the unit is currently inactive, this command starts it.
$ systemctl status --no-pager --full nginx.service
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Tue 2026-04-22 08:41:12 +08; 7s ago
Process: 1842 ExecReload=/usr/bin/nginx -s reload (code=exited, status=0/SUCCESS)
Main PID: 1788 (nginx)
Tasks: 3 (limit: 4545)
Memory: 4.7M (peak: 5.2M)
CPU: 58ms
CGroup: /system.slice/nginx.service
├─1788 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─1843 "nginx: worker process"
└─1844 "nginx: worker process"
##### snipped #####
The Process: line for ExecReload= shows the reload path ran. When the unit reports CanReload=no, expect a fresh Active: timestamp or a new Main PID instead of an ExecReload= result.
$ sudo journalctl -u nginx.service -n 6 --no-pager Apr 22 08:41:12 server systemd[1]: Reloading nginx.service - A high performance web server and a reverse proxy server... Apr 22 08:41:12 server nginx[1842]: signal process started Apr 22 08:41:12 server systemd[1]: Reloaded nginx.service - A high performance web server and a reverse proxy server.
A restart fallback shows stop-and-start lines instead of Reloading and Reloaded. This is the clearer follow-up when the service stays active but still appears to be using old settings.
$ sudo systemctl try-reload-or-restart nginx.service
try-reload-or-restart reloads or restarts only active units. It does nothing when the target service is already inactive.
$ sudo systemctl daemon-reload
daemon-reload makes systemd reread changed unit definitions, but it does not reload the application's own configuration by itself. Run it before reload-or-restart after editing files such as /etc/systemd/system/nginx.service/ or /etc/systemd/system/nginx.service.d/*.conf/.