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