From 07c7c94a75c227cfc50bd665e9d29b5873716937 Mon Sep 17 00:00:00 2001 From: Jun Futagawa <jfut@integ.jp> Date: Tue, 15 May 2012 16:38:07 +0900 Subject: [PATCH] Add support to daemon-util for distributions without start-stop-daemon This adds support to daemon-util for Red Hat based distributions that do not have a start-stop-daemon. If /sbin/start-stop-daemon is not available, daemon-util will source /etc/rc.d/init.d/functions. check(), start(), and stop() are updated to use the relevant functions from /etc/rc.d/init.d/functions. Thanks to Stephen Fromm and Michael Hanselmann for improving the error handling, style, and comments. Signed-off-by: Jun Futagawa <jfut@integ.jp> Reviewed-by: Michael Hanselmann <hansmi@google.com> (cherry picked from commit 4b42c3d665d4d92068e4319dfd35e83a54443f3b) --- daemons/daemon-util.in | 57 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in index 03decbffb..5bf2c3fa0 100644 --- a/daemons/daemon-util.in +++ b/daemons/daemon-util.in @@ -45,6 +45,12 @@ if [[ -s $defaults_file ]]; then . $defaults_file fi +# Meant to facilitate use utilities in /etc/rc.d/init.d/functions in case +# start-stop-daemon is not available. +_ignore_error() { + eval "$@" || : +} + _daemon_pidfile() { echo "@LOCALSTATEDIR@/run/ganeti/$1.pid" } @@ -176,9 +182,17 @@ check() { fi local name="$1"; shift - - start-stop-daemon --stop --signal 0 --quiet \ - --pidfile $(_daemon_pidfile $name) + local pidfile=$(_daemon_pidfile $name) + local daemonexec=$(_daemon_executable $name) + + if type -p start-stop-daemon >/dev/null; then + start-stop-daemon --stop --signal 0 --quiet \ + --pidfile $pidfile + else + _ignore_error status \ + -p $pidfile \ + $daemonexec + fi } # Starts a daemon @@ -189,6 +203,9 @@ start() { fi local name="$1"; shift + local pidfile=$(_daemon_pidfile $name) + local usergroup=$(_daemon_usergroup $plain_name) + local daemonexec=$(_daemon_executable $name) if [[ "$name" == ganeti-confd && "@CUSTOM_ENABLE_CONFD@" == False ]]; then @@ -205,11 +222,20 @@ start() { @PKGLIBDIR@/ensure-dirs - start-stop-daemon --start --quiet --oknodo \ - --pidfile $(_daemon_pidfile $name) \ - --startas $(_daemon_executable $name) \ - --chuid $(_daemon_usergroup $plain_name) \ - -- $args "$@" + if type -p start-stop-daemon >/dev/null; then + start-stop-daemon --start --quiet --oknodo \ + --pidfile $pidfile \ + --startas $daemonexec \ + --chuid $usergroup \ + -- $args "$@" + else + # TODO: Find a way to start daemon with a group, until then the group must + # be removed + _ignore_error daemon \ + --pidfile $pidfile \ + --user ${usergroup%:*} \ + $daemonexec $args "$@" + fi } # Stops a daemon @@ -220,9 +246,14 @@ stop() { fi local name="$1"; shift + local pidfile=$(_daemon_pidfile $name) - start-stop-daemon --stop --quiet --oknodo --retry 30 \ - --pidfile $(_daemon_pidfile $name) + if type -p start-stop-daemon >/dev/null; then + start-stop-daemon --stop --quiet --oknodo --retry 30 \ + --pidfile $pidfile + else + _ignore_error killproc -p $pidfile $name + fi } # Starts a daemon if it's not yet running @@ -275,6 +306,12 @@ reload_ssh_keys() { @RPL_SSH_INITD_SCRIPT@ restart } +# Read @SYSCONFDIR@/rc.d/init.d/functions if start-stop-daemon not available +if ! type -p start-stop-daemon >/dev/null && \ + [[ -f @SYSCONFDIR@/rc.d/init.d/functions ]]; then + _ignore_error . @SYSCONFDIR@/rc.d/init.d/functions +fi + if [[ "$#" -lt 1 ]]; then echo "Usage: $0 <action>" >&2 exit 1 -- GitLab