From 6dd3dfb79125cd02d02efbce435a6c82e5af92ef Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 3 Jun 2024 19:01:24 +0200 Subject: Adding upstream version 3.1.8. Signed-off-by: Daniel Baumann --- init/corosync.in | 230 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100755 init/corosync.in (limited to 'init/corosync.in') diff --git a/init/corosync.in b/init/corosync.in new file mode 100755 index 0000000..30a0683 --- /dev/null +++ b/init/corosync.in @@ -0,0 +1,230 @@ +#!@BASHPATH@ + +# Authors: +# Andrew Beekhof +# Fabio M. Di Nitto +# +# License: Revised BSD + +# chkconfig: - 20 80 +# description: Corosync Cluster Engine +# processname: corosync +# +### BEGIN INIT INFO +# Provides: corosync +# Required-Start: $network $syslog +# Required-Stop: $network $syslog +# Default-Start: +# Default-Stop: +# Short-Description: Starts and stops Corosync Cluster Engine. +# Description: Starts and stops Corosync Cluster Engine. +### END INIT INFO + +desc="Corosync Cluster Engine" +prog="corosync" +prog_pid_file="@LOCALSTATEDIR@/run/$prog.pid" + +# set secure PATH +PATH="/sbin:/bin:/usr/sbin:/usr/bin:@SBINDIR@" + +success() +{ + echo -ne "[ OK ]\r" +} + +failure() +{ + echo -ne "[FAILED]\r" +} + +warning() +{ + echo -ne "[WARNING]\r" +} + +# pid_var_run pid_file +# Echo pid from given pid_file. +# Returns LSB exit code for the 'status' action. +pid_var_run() +{ + local pid_file="$1" + local pid + + if [ -f "$pid_file" ]; then + [ ! -r "$pid_file" ] && return 4 + pid=$(cat "$pid_file") + [ -z "$pid" ] && return 1 + [ -n "${pid//[0-9]/}" ] && return 1 + if kill -n 0 "$pid" 2>/dev/null;then + echo "$pid" + return 0 + else + return 1 + fi + fi + + return 3 +} + +# status [-p pid_file] {program} +status() +{ + local pid_file + + if [ "$1" = "-p" ]; then + pid_file=$2 + shift 2 + fi + + pid=$(pid_var_run "$pid_file" 2>/dev/null) + res=$? + if [ $res -ne 0 -a -z "$pid_file" ]; then + pid=$(__pids_pidof "$1") + [ -n "$pid" ] + res=$? + fi + + if [ $res -ne 0 ]; then + echo "$1 is stopped" + else + echo "$1 (pid $pid) is running..." + fi + return $res +} + +[ -f @INITCONFIGDIR@/$prog ] && . @INITCONFIGDIR@/$prog + +case '@INITCONFIGDIR@' in + */sysconfig) # rpm based distros + [ -f @INITDDIR@/functions ] && . @INITDDIR@/functions + [ -z "$LOCK_FILE" ] && LOCK_FILE="@LOCALSTATEDIR@/lock/subsys/$prog";; + */default) # deb based distros + [ -z "$LOCK_FILE" ] && LOCK_FILE="@LOCALSTATEDIR@/lock/$prog";; +esac + +# The version of __pids_pidof in /etc/init.d/functions calls pidof with -x +# This means it matches scripts, including this one. +# Redefine it here so that status (from the same file) works. +# Otherwise simultaneous calls to stop() will loop forever +__pids_pidof() { + pidof -c -o $$ -o $PPID -o %PPID "$1" || \ + pidof -c -o $$ -o $PPID -o %PPID "${1##*/}" +} + +cluster_disabled_at_boot() +{ + if grep -q nocluster /proc/cmdline && \ + [ "$(tty)" = "/dev/console" ]; then + echo -e "not configured to run at boot" + failure + return 1 + fi + return 0 +} + +wait_for_ipc() +{ + try=0 + max_try=$((COROSYNC_INIT_TIMEOUT*2-1)) + [ "$max_try" -le "0" ] && max_try=120 + + while [ "$try" -le "$max_try" ]; do + if corosync-cpgtool > /dev/null 2>&1; then + return 0 + fi + sleep 0.5 + try=$((try + 1)) + done + + return 1 +} + +start() +{ + echo -n "Starting $desc ($prog): " + + ! cluster_disabled_at_boot && return + + # most recent distributions use tmpfs for @LOCALSTATEDIR@/run + # to avoid to clean it up on every boot. + # they also assume that init scripts will create + # required subdirectories for proper operations + mkdir -p @LOCALSTATEDIR@/run + + if status -p "$prog_pid_file" "$prog" > /dev/null 2>&1; then + success + else + $prog $COROSYNC_OPTIONS > /dev/null 2>&1 + + if [ "$?" != 0 ] || ! wait_for_ipc; then + failure + rtrn=1 + else + touch $LOCK_FILE + if corosync-cfgtool -s > /dev/null 2>&1; then + success + else + warning + fi + fi + fi + echo +} + +stop() +{ + ! status -p "$prog_pid_file" "$prog" > /dev/null 2>&1 && return + + echo -n "Signaling $desc ($prog) to terminate: " + # Call cfgtool to trigger shutdown callbacks + corosync-cfgtool -H --force > /dev/null 2>&1 + # Send TERM signal (if cfgtool -H failed) + kill -TERM "$(pid_var_run $prog_pid_file)" > /dev/null 2>&1 + success + echo + + echo -n "Waiting for $prog services to unload:" + while status -p "$prog_pid_file" "$prog" > /dev/null 2>&1; do + sleep 1 + echo -n "." + done + + rm -f $LOCK_FILE + success + echo +} + +restart() +{ + stop + start +} + +rtrn=0 + +case "$1" in +start) + start +;; +restart|reload|force-reload) + restart +;; +condrestart|try-restart) + if status -p "$prog_pid_file" "$prog" > /dev/null 2>&1; then + restart + fi +;; +status) + status -p "$prog_pid_file" "$prog" + rtrn=$? +;; +stop) + stop +;; +*) + echo "usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}" + rtrn=2 +;; +esac + +exit $rtrn -- cgit v1.2.3