#! /bin/sh # $Id: wedged.sh.in,v 1.2 2006/06/02 18:57:58 faxguy Exp $ # # HylaFAX Facsimile Software # # Copyright (c) 1994-1996 Sam Leffler # Copyright (c) 1994-1996 Silicon Graphics, Inc. # HylaFAX is a trademark of Silicon Graphics # # Permission to use, copy, modify, distribute, and sell this software and # its documentation for any purpose is hereby granted without fee, provided # that (i) the above copyright notices and this permission notice appear in # all copies of the software and related documentation, and (ii) the names of # Sam Leffler and Silicon Graphics may not be used in any advertising or # publicity relating to the software without the specific, prior written # permission of Sam Leffler and Silicon Graphics. # # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. # # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. # # # wedged deviceID device # # Do something when a modem looks irretrievably wedged. # if [ $# != 2 ]; then echo "Usage: $0 deviceID device" exit 1 fi test -f etc/setup.cache || { SPOOL=`pwd` cat</dev/null 2>&1; then ERRORSTO=`$TTYCMD` else ERRORSTO=/dev/null fi # # Command line params # devID=$1 device=$2 # # Variables customizable through etc/FaxDispatch # TOADDR=FaxMaster FROMADDR=fax WEDGED_EMAIL_INTERVAL=5 # minutes: at most 1 wedged email every X mins WEDGED_DISABLE_FAXGETTY= # if set, faxgetty disabled from inittab if [ -f etc/FaxDispatch ]; then . etc/FaxDispatch fi # # Internal variables # # unix secs since epoch for systems without GNU date +%s extension unixtime() { TZ=GMT date "+%Y %j %H %M %S" | $SED 's/ 0*/ /g' | { read year yday hour min sec expr $sec + $min \* 60 + $hour \* 3600 \ + \( \( $year - 1969 \) / 4 \ - \( $year / 100 - 19 \) \ + \( $year / 400 - 4 \) \ + $yday - 1 \ \) \* 86400 \ + \( $year - 1970 \) \* 31536000 } } tty=`basename $device` wedged_last_time=0 # seconds: unix timestamp wedged_interval=0 # minutes wedged_log_file="tmp/${devID}_last_wedged_email" wedged_current_time=`date +%s` # seconds: unix timestamp # If it's not a number (no GNU date), fallback to internal function wedged_current_time=`expr "$wedged_current_time" + 0 2>/dev/null || unixtime` # # Read last time 'wedged modem' email was sent # if [ -r $wedged_log_file ]; then # read stored timestamp read wedged_last_time < $wedged_log_file 2>/dev/null # Set it to 0 if it's not a number wedged_last_time=`expr "$wedged_last_time" + 0 2>/dev/null || echo 0` # shouldn't happen, just in case... if [ $wedged_last_time -gt $wedged_current_time ]; then wedged_last_time=0 fi fi # # Minutes since last 'wedged modem' email was sent # wedged_interval=`expr \( $wedged_current_time - $wedged_last_time \) / 60` # # Send 'wedged modem' email if either is true: # 1. there's no log file (email was never sent before or someone deleted it) # 2. email was sent longer than WEDGED_EMAIL_INTERVAL minutes ago # Cases like 'modem was wedged 1 year ago, and is now again wedged for the # first time', fall into #1 if someone deleted the log file, into #2 if # log file was left in place. # if [ ! -r $wedged_log_file \ -o $wedged_interval -gt $WEDGED_EMAIL_INTERVAL ]; then # # Write current timestamp into logfile under tmp/ # if [ $wedged_current_time -gt 0 ]; then $RM -f $wedged_log_file # symlink? :-) $CAT< $wedged_log_file $wedged_current_time This is a temp file written and read by bin/wedged to rate-limit the emails it sends about the wedged status of device $device. The first line contains a timestamp for when the last email was sent. This file is never deleted automatically, there's no need to do it and it may be useful to know when/if a device had last a problem. However, you can safely delete it at any time if you wish, it will be recreated when needed. last modified: `date` EOF fi # # Send 'modem is wedged' email # ($CAT< Subject: modem on $device appears wedged The HylaFAX software thinks that there is a problem with the modem on device $device that needs attention; repeated attempts to initialize the modem have failed. Consult the server trace logs for more information on what is happening. You will be notified again after $WEDGED_EMAIL_INTERVAL minutes if the problem persists. EOF if [ -x etc/resetmodem ]; then echo "An attempt to reset the modem has been made." etc/resetmodem $device fi # # Disable faxgetty # NB: this is for an System V-style system. # if [ -f /etc/inittab ] && [ -n "$WEDGED_DISABLE_FAXGETTY" ]; then ed - /etc/inittab<$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $TOADDR fi exit 0