X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=contrib%2FDebian%2Fngircd.init;h=f308dd2a001614dd25058027be72d89ced644535;hp=769839533b88fdb4a5e9bb186112a8c4da151c65;hb=c8bba8e5c360519e3d6401a62dbc023515ddd8d7;hpb=ba19fb8ff4751248a26b6c066890af9b57c200d5 diff --git a/contrib/Debian/ngircd.init b/contrib/Debian/ngircd.init index 76983953..f308dd2a 100755 --- a/contrib/Debian/ngircd.init +++ b/contrib/Debian/ngircd.init @@ -1,73 +1,175 @@ #!/bin/sh # # ngIRCd start and stop script for Debian-based systems +# Copyright 2008,2009 Alexander Barton # -# $Id: ngircd.init,v 1.4 2005/02/14 00:44:48 alex Exp $ -# + +### BEGIN INIT INFO +# Provides: ngircd ircd +# Required-Start: $network $local_fs +# Required-Stop: +# Should-Start: $syslog $named +# Should-Stop: $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Next Generation IRC Server +# Description: IRC daemon written from scratch +### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/ngircd NAME=ngIRCd -BASENAME=`basename $0` DESC="IRC daemon" PARAMS="" +STARTTIME=1 +DIETIME=10 + +test -x $DAEMON || exit 5 + +test -h "$0" && me=`readlink $0` || me="$0" +BASENAME=`basename $me` -test -f /etc/default/$BASENAME && . /etc/default/$BASENAME +test -r /etc/default/$BASENAME && . /etc/default/$BASENAME -test -x $DAEMON || exit 0 +# LSB compatibility functions that become used if there is no local +# include file available. +log_daemon_msg() { + echo -n "$*" +} +log_end_msg() { + [ "$1" == "0" ] && echo "." || echo " failed!" +} +log_failure_msg() { + echo "$*" +} +log_warning_msg() { + log_failure_msg "$*" +} + +# Include LSB functions, if available: +test -r /lib/lsb/init-functions && . /lib/lsb/init-functions + +PIDFILE=`$DAEMON $PARAMS -t | tr -d ' ' | grep "^PidFile=" | cut -d'=' -f2` +[ -n "$PIDFILE" ] || PIDFILE="/var/run/ircd/ngircd.pid" + +r=3 Check_Config() { - $DAEMON --configtest >/dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "Configuration of $NAME is not valide, won't (re)start!" - echo "Please run \"$DAEMON --configtest\" manually and fix it up ..." - exit 1 + # Make sure that the configuration of ngIRCd is valid: + $DAEMON $PARAMS --configtest >/dev/null 2>&1 + [ $? -eq 0 ] && return 0 + log_end_msg 1 + log_failure_msg "Configuration of $NAME is not valid, won't (re)start!" + log_failure_msg "Run \"$DAEMON --configtest\" and fix it up ..." + exit 6 +} + +Prepare() { + # Make sure the PID file directory exists and is writable: + user=`$DAEMON $PARAMS -t|tr -d ' '|grep "^ServerUID="|cut -d'=' -f2` + group=`$DAEMON $PARAMS -t|tr -d ' '|grep "^ServerGID="|cut -d'=' -f2` + piddir=`dirname "$PIDFILE"` + [ -d "$piddir" ] || mkdir -p "$piddir" 2>/dev/null + chown "$user:$group" "$piddir" 2>/dev/null + [ $? -eq 0 ] && return 0 + log_end_msg 1 + log_failure_msg "Failed to prepare '$piddir' for user '$user'!" + exit 1 +} + +Do_Start() { + if Do_Status; then + log_end_msg 0 + log_warning_msg "$NAME seems to be already running, nothing to do." + exit 0 fi + start-stop-daemon --start \ + --quiet --exec $DAEMON -- $PARAMS + sleep $STARTTIME + Do_Status || return 7 + return 0 } -Try_Start() -{ - [ ! -d /var/run/ircd ] || chown irc:irc /var/run/ircd - start-stop-daemon --start --quiet --exec $DAEMON -- $PARAMS - if [ $? -ne 0 ]; then - echo "$NAME failed!" - exit 1 +Do_Stop() { + if ! Do_Status; then + log_end_msg 0 + log_warning_msg "$NAME seems not to be running, nothing to do." + exit 0 fi - echo "$NAME." + Do_ForceStop + return $? +} + +Do_ForceStop() { + [ -e $PIDFILE ] \ + && pidfile="--pidfile $PIDFILE" \ + || pidfile="" + start-stop-daemon --stop \ + --quiet --oknodo --exec $DAEMON $pidfile + for i in `seq 1 $DIETIME`; do + Do_Status || return 0 + sleep 1 + done + return 1 +} + +Do_Reload() { + start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON + return $? +} + +Do_Status() { + [ -e $PIDFILE ] \ + && pidfile="--pidfile $PIDFILE" \ + || pidfile="" + start-stop-daemon --stop \ + --quiet --signal 0 --exec $DAEMON $pidfile >/dev/null + return $? } case "$1" in start) + log_daemon_msg "Starting $DESC" "$NAME" Check_Config - echo -n "Starting $DESC: " - Try_Start + Prepare + Do_Start; r=$? + log_end_msg $r ;; stop) - echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile /var/run/ircd/ngircd.pid --exec $DAEMON \ - && echo "$NAME." \ - || echo "(none running)" + log_daemon_msg "Stopping $DESC" "$NAME" + Do_Stop; r=$? + log_end_msg $r ;; reload|force-reload) + log_daemon_msg "Reloading $DESC" "$NAME" Check_Config - echo "Reloading $DESC configuration files." - start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON + Do_Reload; r=$? + log_end_msg $r ;; restart) + log_daemon_msg "Restarting $DESC" "$NAME" Check_Config - echo -n "Restarting $DESC: " - start-stop-daemon --stop --quiet --oknodo --exec $DAEMON - sleep 1 - Try_Start + Prepare + Do_ForceStop + Do_Start; r=$? + log_end_msg $r + ;; + status) + log_daemon_msg "Checking for $DESC" "$NAME" + Do_Status; r=$? + log_end_msg $r + ;; + test) + Check_Config + echo "Configuration of $DAEMON seems to be ok."; r=0 ;; *) - N=/etc/init.d/$NAME - echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 - exit 1 + N=/etc/init.d/$NAME; r=2 + echo "Usage: $N {start|stop|restart|reload|force-reload|status|test}" >&2 ;; esac -exit 0 +exit $r # -eof-