Bug#782993: service/invoke-rc.d: "force-reload" wrongly mapped to "systemctl restart"
Ansgar Burchardt
ansgar at debian.org
Mon Apr 20 10:13:03 BST 2015
Package: sysvinit-utils
Version: 2.88dsf-59
Severity: normal
File: /usr/sbin/service
service uses the following logic:
+----
| force-reload)
| _canreload="$(systemctl -p CanReload show ${UNIT} 2>/dev/null)"
| if [ "$_canreload" = "CanReload=no" ]; then
| exec systemctl restart "${UNIT}"
| else
| exec systemctl reload "${UNIT}"
| fi
| ;;
+---[ /usr/sbin/service ]
This maps "service atd force-reload" to "systemctl restart atd" which
*starts* atd if it is not already running. However LSB says:
+---
| force-reload: cause the configuration to be reloaded if the
| service supports this, otherwise restart the service if it is
| running
+---[ http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html ]
Though Debian's policy isn't quite so clear:
+---
| force-reload: cause the configuration to be reloaded if the
| service supports this, otherwise restart the service.
+---[ https://www.debian.org/doc/debian-policy/ch-opersys.html#s-writing-init ]
I assume the intent is the same. Note that the systemd integration
already maps "/etc/init.d/X force-reload" to "systemctl force-reload
X" which is equivalent to "systemctl reload-or-try-restart X" (which
does nothing if X is not already running).
invoke-rc.d duplicates the same logic...
Ansgar
More information about the Pkg-systemd-maintainers
mailing list