#!/bin/sh # # pingcntl: echolot control + wrapper # Written by admin@arancio.net, peter@palfrader.org # ### BEGIN INIT INFO # Provides: echolot # Required-Start: $local_fs $remote_fs $time # Required-Stop: $local_fs $remote_fs # Should-Start: mail-transport-agent $syslog # Should-Stop: mail-transport-agent $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Pinger for anonymous remailers # Description: Echolot is a pinger for anonymous remailers # such as Mixmaster. As the name implies it # regularly sends pings to remailers to # collect performance statistics on each node. ### END INIT INFO set -e VERBOSE=0 # You probably don't want to mess with stuff below this line ################################################################ RUNDIR=/var/run/echolot PIDFILE="$RUNDIR/pingd.pid" CHECKULIMIT=1 CHECKUID=1 USER=echolot GROUP=echolot DAEMON=/usr/bin/pingd DESC="Echolot Ping Daemon" NAME="pingd" test -f $DAEMON || exit 0 PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH # Reads config file (will override defaults above) [ -r /etc/default/echolot ] && . /etc/default/echolot if [ ! -d ${RUNDIR} ]; then mkdir "$RUNDIR" chown root:"$GROUP" "$RUNDIR" chmod 02770 "$RUNDIR" fi wait_for_deaddaemon () { PID=$1 sleep 3 if test -n "$PID" then if kill -0 $PID 2>/dev/null then echo -n "Waiting for pid $PID ." cnt=0 while kill -0 $PID 2>/dev/null do cnt=`expr $cnt + 1` if [ $cnt -gt 30 ] then echo " Failed.. " exit 1 fi sleep 2 echo -n "." done rm -f $PIDFILE else rm -f $PIDFILE fi fi } # Check for evil ulimits if [ "$CHECKULIMIT" -gt "0" ]; then FDs=`ulimit -n` HFDs=`ulimit -H -n` if [ "$FDs" -lt "512" ]; then if [ "$HFDs" -lt "512" ]; then echo "Hardlimit for open File Descriptors is less than 512." >&2 echo "Please consider raising it." >&2 if [ "$FDs" -lt "$HFDs" ]; then echo "Raising it to $HFDs" >&2 ulimit -n $HFDs fi else if [ "$HFDs" -lt "1024" ]; then FDs=$HFDs else FDs=1024 fi echo "Softlimit for open File Descriptors is less than 512." >&2 echo "Raising it to $FDs" >&2 ulimit -n $FDs fi fi fi # set VERBOSE if [ $VERBOSE -gt 0 ]; then VERBOSE="--verbose" else VERBOSE="" fi case $1 in start) if [ -f $PIDFILE ] ; then PID=`cat $PIDFILE 2>/dev/null` || true if kill -0 $PID 2>/dev/null then echo "$DESC already running." exit 0 else echo -n "Removing stale pid file: " rm -f $PIDFILE echo "$PIDFILE." fi fi if [ $RUN_ECHOLOT -gt 0 ]; then echo -n "Starting $DESC: " start-stop-daemon \ --start \ --quiet \ --pidfile $PIDFILE \ --chuid $USER:$GROUP \ --exec $DAEMON -- --detach $VERBOSE --process --quiet start echo "$NAME." else echo "Not starting $DESC: disabled in configuration" fi ;; stop) echo -n "Stopping $DESC: " PID=`cat $PIDFILE 2>/dev/null` || true start-stop-daemon \ --stop \ --quiet \ --oknodo \ --pidfile $PIDFILE \ --user $USER wait_for_deaddaemon $PID echo "$NAME." ;; reload|force-reload|restart) PID=`cat $PIDFILE 2>/dev/null` || true $0 stop wait_for_deaddaemon $PID $0 start ;; process|add|delete|set|setremailercaps|deleteremailercaps|getkeyconf|sendpings|sendchainpings|buildstats|buildkeys|buildthesaurus|buildfromlines|dumpconf|summary|enable|disable) # Check for right User if [ "$CHECKUID" -gt "0" ]; then CUID=`id -u` CUIDNAME=`id -nu` if [ "$CUIDNAME" = "$USER" ]; then "$DAEMON" "$@" elif [ "$CUID" = "0" ]; then command="$DAEMON" while [ "$#" -gt 0 ]; do command="$command \"$1\"" shift done su "$USER" -c "$command" else echo "You are neither $USER nor root. Aborting." >&2 exit 1; fi fi echo "Running $DESC: $NAME $1..." echo "done." ;; *) echo "Usage: $0 (start|stop|reload|force-reload|restart)" >&2 echo " $0 [parameters]" >&2 echo "See the pingd(1) manual page for valid commands" >&2 exit 1 ;; esac exit 0 # vim:set ts=2: # vim:set shiftwidth=2: