* Use /bin/sh, per Debian policy.
* Prefer basename for readability.
* Check for systemd init with [ -e /run/systemd/system ].
* Make configuration changes based on checking the unit file state.
+# NOTE: This package name detection will only work on Debian.
+# If this postinst script ever starts doing work on Red Hat,
+# we'll need to adapt this code accordingly.
+script="$(basename "$0")"
pkg="${script%.postinst}"
pkg="${script%.postinst}"
+systemd_unit="${pkg}.service"
case "${1}" in
configure)
case "${1}" in
configure)
- if which systemctl >/dev/null && [[ -e "/lib/systemd/system/${pkg}.service" ]]; then
- systemctl enable "${pkg}"
- systemctl start "${pkg}"
+ if [ -e /run/systemd/system ]; then
+ eval "$(systemctl -p UnitFileState show "$systemd_unit")"
+ case "$UnitFileState" in
+ disabled)
+ systemctl enable "$systemd_unit"
+ # Failing to start the service is not a package error,
+ # so don't let an error here propagate up.
+ systemctl start "$systemd_unit" || true
+ ;;
+ enabled)
+ systemctl reload-or-try-restart "$systemd_unit" || true
+ ;;
+ esac