diff options
-rw-r--r-- | rc.d/init.d/functions | 9 | ||||
-rwxr-xr-x | service | 7 |
2 files changed, 15 insertions, 1 deletions
diff --git a/rc.d/init.d/functions b/rc.d/init.d/functions index 8e5800b6..558aaee0 100644 --- a/rc.d/init.d/functions +++ b/rc.d/init.d/functions @@ -390,7 +390,14 @@ status() { if [ "$_use_systemctl" = "1" ]; then systemctl status ${0##*/}.service - return $? + ret=$? + # LSB daemons that dies abnormally in systemd looks alive in systemd's eyes due to RemainAfterExit=yes + # lets adjust the reality a little bit + if systemctl show -p ActiveState ${0##*/}.service | grep -q '=active$' && \ + systemctl show -p SubState ${0##*/}.service | grep -q '=exited$' ; then + ret=3 + fi + return $ret fi # First try "pidof" @@ -71,6 +71,13 @@ while [ $# -gt 0 ]; do done if [ -f "${SERVICEDIR}/${SERVICE}" ]; then + # LSB daemons that dies abnormally in systemd looks alive in systemd's eyes due to RemainAfterExit=yes + # lets reap them before next start + if [ "${ACTION}" = "start" ] && \ + systemctl show -p ActiveState ${SERVICE}.service | grep -q '=active$' && \ + systemctl show -p SubState ${SERVICE}.service | grep -q '=exited$' ; then + /bin/systemctl stop ${SERVICE}.service + fi env -i PATH="$PATH" TERM="$TERM" SYSTEMCTL_IGNORE_DEPENDENCIES=${SYSTEMCTL_IGNORE_DEPENDENCIES} SYSTEMCTL_SKIP_REDIRECT=${SYSTEMCTL_SKIP_REDIRECT} "${SERVICEDIR}/${SERVICE}" ${ACTION} ${OPTIONS} elif [ -x "${ACTIONDIR}/${SERVICE}/${ACTION}" -a -n "${ACTION}" ]; then env -i PATH="$PATH" TERM="$TERM" SYSTEMCTL_IGNORE_DEPENDENCIES=${SYSTEMCTL_IGNORE_DEPENDENCIES} SYSTEMCTL_SKIP_REDIRECT=${SYSTEMCTL_SKIP_REDIRECT} "${ACTIONDIR}/${SERVICE}/${ACTION}" ${OPTIONS} |