head 1.11; access; symbols; locks alexis:1.11; strict; comment @# @; 1.11 date 98.08.27.15.38.42; author alexis; state Exp; branches; next 1.10; 1.10 date 98.08.07.11.33.43; author alexis; state Exp; branches; next 1.9; 1.9 date 97.11.12.13.48.51; author alexis; state Exp; branches; next 1.8; 1.8 date 97.11.11.14.07.14; author alexis; state Exp; branches; next 1.7; 1.7 date 97.10.26.12.12.35; author alexis; state Exp; branches; next 1.6; 1.6 date 97.10.20.18.06.02; author alexis; state Exp; branches; next 1.5; 1.5 date 97.02.15.11.41.10; author alexis; state Exp; branches; next 1.4; 1.4 date 97.02.09.15.54.57; author alexis; state Exp; branches; next 1.3; 1.3 date 97.02.01.21.51.41; author alexis; state Exp; branches; next 1.2; 1.2 date 97.01.31.14.43.34; author alexis; state Exp; branches; next 1.1; 1.1 date 97.01.31.10.22.48; author alexis; state Exp; branches; next ; desc @WORKING MILESTONE @ 1.11 log @*** empty log message *** @ text @#!SCRIPTSHELLCMD_MARKER PATH=/bin:/usr/bin PROGNAME=`basename $0` ############################################################################### # # # LINK STATUS REPORTER # # # ############################################################################### ############################################################################### # # Things you should know about this script: # # It is stored under RCS! Keep it that way! If you want a history of # changes made to this script then refer to rlog(1) - don't look here! # ############################################################################### ############################################################################### # # CONFIGURABLE STUFF STARTS HERE # ############################################################################### COUNT=5 ############################################################################### # # CONFIGURABLE STUFF ENDS HERE # ############################################################################### VERSION="PATCHLEVEL_MARKER" # $Id: announce.in,v 1.10 1998/08/07 11:33:43 alexis Exp $ ############################################################################### # # MAIN FUNCTION (called from very bottom of script) # ############################################################################### main() { ########################################################################### # # PROCESS OPTIONS # ########################################################################### MODE=unset while [ "X$1" != X ]; do case "$1" in -V) if expr "$VERSION" : 'P.*R$' > /dev/null; then warning "this is a development version; use 'ident' for version information" exit 1 else echo "$PROGNAME version $VERSION" exit 0 fi ;; -d) [ "X$2" = X ] && usage VERBOSE_LEVEL=$2 shift ;; -v) VERBOSE_LEVEL=3 ;; -b) BEEP=yes ;; -w) MODE=wall ;; -e) MODE=echo ;; -*) usage ;; *) break ;; esac shift done # One argument required - the host to use for the check [ "X$1" = X -o "X$2" != X ] && usage [ $MODE = unset ] && usage # Are locks required? No. This script should run very quickly. ########################################################################### # # ANNOUNCE IT! # ########################################################################### case "$1" in 0) MSG="INTERNET CONNECTION UP" ;; 1) MSG="INTERNET CONNECTION DOWN - BAD QUALITY - REDIALLING" ;; 2) MSG="INTERNET CONNECTION DOWN - BAD QUALITY - NOT REDIALLING" ;; 3) MSG="INTERNET CONNECTION DOWN - REMOTE HANGUP - REDIALLING" ;; 4) MSG="INTERNET CONNECTION DOWN - REMOTE HANGUP - NOT REDIALLING" ;; 5) MSG="INTERNET CONNECTION DOWN - LOCALLY DETECTED IDLE - NOT REDIALLING" ;; 6) MSG="INTERNET CONNECTION DOWN - USER REQUEST - NOT REDIALLING" ;; 7) MSG="INTERNET CONNECTION WILL GO DOWN IN 5 MINUTES" ;; 8) MSG="INTERNET CONNECTION WILL GO DOWN IN 20 MINUTES" ;; *) internal "unknown announcement id ($1)" ;; esac [ "X$BEEP" = Xyes ] && MSG="${MSG}" case $MODE in wall) wall < | -v ] { -e | -w } { 0 | 1 | 2 | 3 | 4 | 5 | 6 }" echo " $PROGNAME -V" } >&2 exit 1 } ############################################################################### # # RESILIANT MESSAGING FUNCTIONS # ############################################################################### internal() { MSG="INTERNAL ERROR: $*" DATE=`date` # echo it so that the user can see it or cron can trap it (split line # to avoid confusing 'ident') echo "$PROGNAME: \ $MSG" >&2 # try to write it into $LOG_FILE if that's defined - other message types # treat unwritable but defined LOG_FILE as an error ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null # try to syslog it - other message types are only syslog'ed if there is # no controlling terminal (as when run from 'at' or 'cron') logger -i -p local0.alert -t $PROGNAME "$MSG" # try to log it on the console echo "$DATE: \ $MSG" > /dev/console exit 2 } error() { DO_EXIT=${ERRORS_CAUSE_EXITS:-true} STDIN=false while :; do case "$1" in -) STDIN=true ;; -e) DO_EXIT=true ;; -ne) DO_EXIT=false ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ ${VERBOSE_LEVEL:-2} -ge 1 ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="ERROR: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.err -t $PROGNAME "$MSG" done fi [ $DO_EXIT = false ] && return 1 exitdel exit 1 } warning() { STDIN=false while :; do case "$1" in -) STDIN=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ ${VERBOSE_LEVEL:-2} -ge 2 ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="WARNING: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.warning -t $PROGNAME "$MSG" done fi return 0 } debug() { STDIN=false while :; do case "$1" in -) STDIN=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done LEVEL=$1 shift if [ ${VERBOSE_LEVEL:-2} -ge $LEVEL ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="DEBUG[$LEVEL]: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.debug -t $PROGNAME "$MSG" done fi return 0 } info() { STDIN=false while :; do case "$1" in -) STDIN=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ ${VERBOSE_LEVEL:-2} -ge 3 ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="INFO: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.info -t $PROGNAME "$MSG" done fi return 0 } ############################################################################### # # GENERIC SUPPORT FUNCTIONS (not specifically related to backup task) # ############################################################################### locatecmd() { for POSSCMD in $*; do [ X`whichcmd $POSSCMD` != X ] && { echo $POSSCMD; return 0; } done return 1 } whichcmd() { for DIR in `echo $PATH | sed 's/:/ /g'`; do [ -x $DIR/$1 ] && { echo $DIR/$1; return 0; } done return 1 } ############################################################################### # # TEMPORARY FILE MANAGEMENT FUNCTIONS # ############################################################################### delonexit() { DELONEXIT="$DELONEXIT $*" } dontdelonexit() { for FILE in $*; do DELONEXIT=`echo $DELONEXIT | sed "s@@$FILE@@@@g"` done } exitdel() { debug 5 "cleaning up" rm -f $DELONEXIT } sighandler() { warning "signal recieved, clearing up and exiting" exitdel exit 3 } ############################################################################### # # LOCKING ROUTINES # ############################################################################### lock() { debug 5 "lock: locking $1" LOCKFILE=`gen_lock_file_name $1` { echo $$ > $LOCKFILE.$$; } 2>/dev/null || error -e "can't create lock" ln $LOCKFILE.$$ $LOCKFILE 2>/dev/null && { rm $LOCKFILE.$$; return 0; } HOLDING_PID=`cat $LOCKFILE` [ "X$HOLDING_PID" = X ] && { rm $LOCKFILE.$$; error -e "empty lockfile: $LOCKFILE"; } [ -d /proc/$HOLDING_PID ] && { rm $LOCKFILE.$$; error -e "program running already! (pid=$HOLDING_PID)"; } info "removing stale lock (pid=$HOLDING_PID)" rm -f $LOCKFILE ln $LOCKFILE.$$ $LOCKFILE 2>/dev/null && { rm $LOCKFILE.$$; return 0; } rm $LOCKFILE.$$ error -e "couldn't lock after removing stale lockfile" } unlock() { debug 5 "unlock: unlocking $1" LOCKFILE=`gen_lock_file_name $1` rm -f $LOCKFILE } umask 022 main "$@@" exit $? @ 1.10 log @milepost - seems to work @ text @d35 1 a35 1 # $Id: sndmail-sendmail.in,v 1.5 1998/02/05 12:27:22 alexis Exp $ d88 10 a97 8 0) MSG="UP" ;; 1) MSG="DOWN - BAD QUALITY - REDIALLING" ;; 2) MSG="DOWN - BAD QUALITY - NOT REDIALLING" ;; 3) MSG="DOWN - REMOTE HANGUP - REDIALLING" ;; 4) MSG="DOWN - REMOTE HANGUP - NOT REDIALLING" ;; 5) MSG="DOWN - LOCALLY DETECTED IDLE - NOT REDIALLING" ;; 6) MSG="DOWN - USER REQUEST - NOT REDIALLING" ;; *) MSG="UNKNOWN" ;; @ 1.9 log @fixed the text of a message @ text @d1 2 a2 1 #!/bin/sh d4 30 d35 1 a35 1 RCS_ID_ANNOUNCE='$Id: announce,v 1.8 1997/11/11 14:07:14 alexis Exp alexis $' d37 5 a41 8 usage() { { echo "Usage: $PROGNAME { 0 | 1 | 2 | 3 | 4 | 5 | 6 }" echo " $PROGNAME -V" } >&2 exit 1 } d45 8 d55 14 a68 2 -V) echo "$PROGNAME version $VERSION" exit 0 ;; d75 12 d95 1 a95 1 *) MSG="UNKNOWN" ;; d98 4 a101 1 wall < /dev/null; } && VERSION="`echo '$Id$' | cut -f3 -d' '` (development)" d6 8 a13 10 case "$1" in 0) MSG="UP" ;; 1) MSG="DOWN - BAD QUALITY - REDIALLING" ;; 2) MSG="DOWN - BAD QUALITY - NOT REDIALLING" ;; 3) MSG="DOWN - REMOTE HANGUP - REDIALLING" ;; 4) MSG="DOWN - REMOTE HANGUP - NOT REDIALLING" ;; 5) MSG="DOWN - LOCALLY DETECTED IDLE - NOT REDIALLING" ;; 6) MSG="DOWN - USER REQUEST - NOT REDIALLING" ;; *) MSG="UNKNOWN" ;; esac d15 24 a38 1 wall <