
Without this patch, the SysV init scripts defined in this module will not be recognized by systemd and puppet will fail to enable the services. This is because between installing the init script and starting the service, systemd needs to be reloaded. This patch adds a new class to define the systemd reload. The conditional logic for whether the reload exec should be in the catalog is defined in the class. Then the file and service resources that depend on the reload define their relationships to the new class rather than to the exec resource so that the conditional logic does not have to be repeated for every resource. We also need to correct a bug in the init scripts themselves. The Provides statement needs to give a unique service name, not just 'zuul'. If it is not unique, insserv will error with "service zuul already provided!" when systemd tries to enable the service. Change-Id: Ica849094c6011806bdd0b205ba6b2b73856b7aa6
142 lines
3.8 KiB
Bash
142 lines
3.8 KiB
Bash
#! /bin/sh
|
|
### BEGIN INIT INFO
|
|
# Provides: zuul-merger
|
|
# Required-Start: $remote_fs $syslog
|
|
# Required-Stop: $remote_fs $syslog
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Zuul
|
|
# Description: Trunk gating system merger
|
|
### END INIT INFO
|
|
|
|
# Do NOT "set -e"
|
|
|
|
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
|
DESC="Zuul Merger"
|
|
NAME=zuul-merger
|
|
DAEMON=/usr/local/bin/zuul-merger
|
|
PIDFILE=/var/run/$NAME/$NAME.pid
|
|
SCRIPTNAME=/etc/init.d/$NAME
|
|
USER=zuul
|
|
|
|
# Exit if the package is not installed
|
|
[ -x "$DAEMON" ] || exit 0
|
|
|
|
# Read configuration variable file if it is present
|
|
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
|
|
|
# Load the VERBOSE setting and other rcS variables
|
|
. /lib/init/vars.sh
|
|
|
|
# Define LSB log_* functions.
|
|
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
|
. /lib/lsb/init-functions
|
|
|
|
#
|
|
# Function that starts the daemon/service
|
|
#
|
|
do_start()
|
|
{
|
|
# Return
|
|
# 0 if daemon has been started
|
|
# 1 if daemon was already running
|
|
# 2 if daemon could not be started
|
|
# 3 if pid file already exist
|
|
|
|
mkdir -p /var/run/$NAME
|
|
chown $USER /var/run/$NAME
|
|
ulimit -n 8192
|
|
if [ -f $PIDFILE ]; then
|
|
return 3
|
|
fi
|
|
start-stop-daemon \
|
|
--start --quiet --pidfile $PIDFILE -c $USER \
|
|
--exec $DAEMON --test > /dev/null || return 1
|
|
start-stop-daemon \
|
|
--start --quiet --pidfile $PIDFILE -c $USER \
|
|
--exec $DAEMON -- $DAEMON_ARGS || return 2
|
|
# Add code here, if necessary, that waits for the process to be ready
|
|
# to handle requests from services started subsequently which depend
|
|
# on this one. As a last resort, sleep for some time.
|
|
}
|
|
|
|
#
|
|
# Function that stops the daemon/service
|
|
#
|
|
do_stop()
|
|
{
|
|
# Return
|
|
# 0 if daemon has been stopped
|
|
# 1 if daemon was already stopped
|
|
# 2 if daemon could not be stopped
|
|
# other if a failure occurred
|
|
start-stop-daemon --stop --signal 9 --pidfile $PIDFILE
|
|
RETVAL="$?"
|
|
[ "$RETVAL" = 2 ] && return 2
|
|
rm -f /var/run/$NAME/*
|
|
return "$RETVAL"
|
|
}
|
|
|
|
#
|
|
# Function that sends a SIGHUP to the daemon/service
|
|
#
|
|
do_reload() {
|
|
#
|
|
# If the daemon can reload its configuration without
|
|
# restarting (for example, when it is sent a SIGHUP),
|
|
# then implement that here.
|
|
#
|
|
start-stop-daemon \
|
|
--stop --signal 1 --quiet --pidfile $PIDFILE --name zuul-merger
|
|
return 0
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
|
do_start
|
|
case "$?" in
|
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
|
3) echo "Pidfile at $PIDFILE already exists, run service zuul-merger stop to clean up."
|
|
esac
|
|
;;
|
|
stop)
|
|
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
|
do_stop
|
|
case "$?" in
|
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
|
esac
|
|
;;
|
|
status)
|
|
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
|
;;
|
|
reload|force-reload)
|
|
#
|
|
# If do_reload() is not implemented then leave this commented out
|
|
# and leave 'force-reload' as an alias for 'restart'.
|
|
#
|
|
log_daemon_msg "Reloading $DESC" "$NAME"
|
|
do_reload
|
|
log_end_msg $?
|
|
;;
|
|
restart)
|
|
#
|
|
# If the "reload" option is implemented then remove the
|
|
# 'force-reload' alias
|
|
#
|
|
log_daemon_msg "Restarting $DESC" "$NAME"
|
|
do_stop
|
|
do_start
|
|
;;
|
|
*)
|
|
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
|
exit 3
|
|
;;
|
|
esac
|
|
|
|
:
|