Make the default start, stop and status functions overridable

This will make it possible to add support for supervision suites such as
runit and s6.
This commit is contained in:
William Hubbs 2015-05-08 11:29:49 -05:00
parent 0b435ddd83
commit abef2fcb2d
4 changed files with 87 additions and 67 deletions

View File

@ -77,6 +77,12 @@
#rc_crashed_stop=NO
#rc_crashed_start=YES
# Set rc_supervisor to use a program to monitor your daemons and restart
# them when they crash.
# Leaving this undefined uses start-stop-daemon, which is OpenRC's
# default.
#rc_supervisor=""
# Set rc_nocolor to yes if you do not want colors displayed in OpenRC
# output.
#rc_nocolor=NO

View File

@ -1,7 +1,7 @@
DIR= ${LIBEXECDIR}/sh
SRCS= init.sh.in functions.sh.in gendepends.sh.in \
openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
INC= rc-mount.sh functions.sh rc-functions.sh
INC= rc-mount.sh functions.sh rc-functions.sh start-stop-daemon.sh
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
INSTALLAFTER= _installafter

View File

@ -125,72 +125,6 @@ _status()
fi
}
# Template start / stop / status functions
start()
{
[ -n "$command" ] || return 0
local _background=
ebegin "Starting ${name:-$RC_SVCNAME}"
if yesno "${command_background}"; then
if [ -z "${pidfile}" ]; then
eend 1 "command_background option used but no pidfile specified"
return 1
fi
_background="--background --make-pidfile"
fi
if yesno "$start_inactive"; then
local _inactive=false
service_inactive && _inactive=true
mark_service_inactive
fi
eval start-stop-daemon --start \
--exec $command \
${chroot:+--chroot} $chroot \
${procname:+--name} $procname \
${pidfile:+--pidfile} $pidfile \
$_background $start_stop_daemon_args \
-- $command_args
if eend $? "Failed to start $RC_SVCNAME"; then
service_set_value "command" "${command}"
[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}"
[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
[ -n "${procname}" ] && service_set_value "procname" "${procname}"
return 0
fi
if yesno "$start_inactive"; then
if ! $_inactive; then
mark_service_stopped
fi
fi
return 1
}
stop()
{
local startcommand="$(service_get_value "command")"
local startchroot="$(service_get_value "chroot")"
local startpidfile="$(service_get_value "pidfile")"
local startprocname="$(service_get_value "procname")"
command="${startcommand:-$command}"
chroot="${startchroot:-$chroot}"
pidfile="${startpidfile:-$pidfile}"
procname="${startprocname:-$procname}"
[ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0
ebegin "Stopping ${name:-$RC_SVCNAME}"
start-stop-daemon --stop \
${retry:+--retry} $retry \
${command:+--exec} $command \
${procname:+--name} $procname \
${pidfile:+--pidfile} $chroot$pidfile \
${stopsig:+--signal} $stopsig
eend $? "Failed to stop $RC_SVCNAME"
}
status()
{
_status
}
yesno $RC_DEBUG && set -x
_conf_d=${RC_SERVICE%/*}/../conf.d
@ -212,6 +146,15 @@ unset _conf_d
# Load any system overrides
sourcex -e "@SYSCONFDIR@/rc.conf"
# load a service supervisor
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
if [ -n "$rc_supervisor" ]; then
if ! sourcex -e "@LIBEXECDIR@/sh/${rc_supervisor}.sh"; then
ewarn "$rc_supervisor is an invalid value for rc_supervisor"
ewarn "Using the default."
fi
fi
# Set verbose mode
if yesno "${rc_verbose:-$RC_VERBOSE}"; then
EINFO_VERBOSE=yes

71
sh/start-stop-daemon.sh Normal file
View File

@ -0,0 +1,71 @@
# Default start / stop / status functions
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
start()
{
[ -n "$command" ] || return 0
local _background=
ebegin "Starting ${name:-$RC_SVCNAME}"
if yesno "${command_background}"; then
if [ -z "${pidfile}" ]; then
eend 1 "command_background option used but no pidfile specified"
return 1
fi
if [ -n "${command_args_background}" ]; then
eend 1 "command_background used with command_args_background"
return 1
fi
_background="--background --make-pidfile"
fi
if yesno "$start_inactive"; then
local _inactive=false
service_inactive && _inactive=true
mark_service_inactive
fi
eval start-stop-daemon --start \
--exec $command \
${procname:+--name} $procname \
${pidfile:+--pidfile} $pidfile \
${command_user+--user} $command_user \
$_background $start_stop_daemon_args \
-- $command_args $command_args_background
if eend $? "Failed to start $RC_SVCNAME"; then
service_set_value "command" "${command}"
[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
[ -n "${procname}" ] && service_set_value "procname" "${procname}"
return 0
fi
if yesno "$start_inactive"; then
if ! $_inactive; then
mark_service_stopped
fi
fi
return 1
}
stop()
{
local startcommand="$(service_get_value "command")"
local startpidfile="$(service_get_value "pidfile")"
local startprocname="$(service_get_value "procname")"
command="${startcommand:-$command}"
pidfile="${startpidfile:-$pidfile}"
procname="${startprocname:-$procname}"
[ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0
ebegin "Stopping ${name:-$RC_SVCNAME}"
start-stop-daemon --stop \
${retry:+--retry} $retry \
${command:+--exec} $command \
${procname:+--name} $procname \
${pidfile:+--pidfile} $pidfile \
${stopsig:+--signal} $stopsig
eend $? "Failed to stop $RC_SVCNAME"
}
status()
{
_status
}