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