1#!/bin/sh 2# File: mf-start 3# Version: 1.14 4# Purpose: Makes sure mail filter keeps running 5# (Called from the 'mail-filter' script) 6# Written by: R.Butler <butlerra@sbu.ac.uk> 7# Date: 06-Jun-2000 8# Revised: 08-Mar-2001 9# 10# Copyright (C) 2001 South Bank University, London 11# (Please see the full copyright notice in 'copyright.txt') 12 13FILTER=$1 14SOCKET=$2 15 16MAX_FAILURES=10 17MIN_UPTIME=30 18BN_FILTER=`basename $FILTER` 19 20# Check that the WORK_DIR variable has been exported 21if [ -z "$WORK_DIR" ] 22then 23 echo " " 24 echo "$0: Variable WORK_DIR is not defined" 25 echo "To start the mail filter, please use the command:" 26 echo " mail-filter start" 27 echo " " 28 exit 3 29fi 30LOGFILE="$WORK_DIR/mail-filter.log" 31 32FILTER_PID=`ps -af | grep $FILTER \ 33 | grep -v $0 | grep -v 'grep' \ 34 | awk '{print $1}'` 35if [ -n "$FILTER_PID" ] 36then 37 DATE=`date +"%d-%b-%Y %T"` 38 echo "$DATE : Start; $BN_FILTER is already running; PID = $FILTER_PID" \ 39 >> $LOGFILE 40 exit 2 41fi 42 43# If the filter was not shut down properly, the socket, if it is a 44# 'local' file, may still exist. 45 46SOCKET_TYPE=`echo $SOCKET | awk '{split($1,part,":"); print part[1]}'` 47if [ "$SOCKET_TYPE" = "local" ] 48then 49 SOCKET_FILE=`echo $SOCKET | awk '{split($1,part,":"); print part[2]}'` 50fi 51 52FAIL_COUNT=0 53while : 54do 55 DATE=`date +"%d-%b-%Y %T"` 56 echo "$DATE : Starting $BN_FILTER; FAIL_COUNT = $FAIL_COUNT" \ 57 >> $LOGFILE 58 START_TIME=`date '+%d%H%M%S'` 59 60 if [ "$SOCKET_TYPE" = "local" ] 61 then 62 if [ -r $SOCKET_FILE ] 63 then 64 echo "$DATE : Removing old socket file $SOCKET_FILE" \ 65 >> $LOGFILE 66 rm -f $SOCKET_FILE 67 fi 68 fi 69 70 nohup $FILTER -p $SOCKET -d $WORK_DIR > /dev/null 71 STOP_TIME=`date '+%d%H%M%S'` 72 UPTIME=`expr $STOP_TIME - $START_TIME` 73 if [ 0 -le $UPTIME -a $UPTIME -lt $MIN_UPTIME ] 74 then 75 FAIL_COUNT=`expr $FAIL_COUNT + 1` 76 else 77 FAIL_COUNT=0 78 fi 79 if [ $FAIL_COUNT -gt $MAX_FAILURES ] 80 then 81 DATE=`date +"%d-%b-%Y %T"` 82 echo "$DATE : EXIT; $BN_FILTER failed more than $MAX_FAILURES times." \ 83 >> $LOGFILE 84 exit 1 85 fi 86 sleep 10 87done 88 89 90