#!/bin/bash # # mailscanner This shell script takes care of starting and stopping # MailScanner only. # # chkconfig: 2345 80 30 # description: MailScanner is an open-source E-Mail Gateway Virus Scanner. # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network SHOWNAME="MailScanner" INSTANCENAME="MailScanner" PROGNAME=/opt/MailScanner/bin/MailScanner CONFIG=/opt/MailScanner/etc/${INSTANCENAME}.conf #PIDFILE=/opt/MailScanner/var/${INSTANCENAME}.pid # get PID file name from configuration PIDFILE=`/bin/grep -i '^ *PID *File *=' $CONFIG 2>/dev/null | cut -d '=' -f 2` #WORKDIR=/var/spool/MailScanner/incoming/${INSTANCENAME} # get working directory name from configuration WORKDIR=`/bin/grep -i '^ *Incoming *Work *Dir *=' $CONFIG 2>/dev/null | cut -d '=' -f 2` LOCKFILE=/var/lock/subsys/${INSTANCENAME}.lock export SHOWNAME export INSTANCENAME export PROGNAME export CONFIG export PIDFILE export WORKDIR # debug variables #echo SHOWNAME $SHOWNAME #echo INSTANCENAME $INSTANCENAME #echo PROGNAME $PROGNAME #echo CONFIG $CONFIG #echo PIDFILE $PIDFILE #echo WORKDIR $WORKDIR #echo PID: $PIDFILE # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 if [ -f $PROGNAME ] then echo -n else echo Program $PROGNAME: No such file exit 100 fi if [ -f $CONFIG ] then echo -n else echo Configuration $CONFIG: No such file exit 101 fi checkpidisours() { if [ "$#" -ne 1 ]; then echo $"Usage: checkpidisours {pid}" return 1 fi pid=$1 [ -d "/proc/$pid" ] || return 1 /bin/grep -q -s $PROGNAME /proc/$pid/cmdline return $? } RETVAL=0 # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting $SHOWNAME daemon: " touch $PIDFILE if [ -d $WORKDIR ] then echo -n "" else /bin/mkdir -p $WORKDIR fi pid=`cat $PIDFILE 2>/dev/null` if [ -n $pid ] && checkpidisours $pid >/dev/null ; then echo -n "already running - PID " $SETCOLOR_WARNING echo -n $pid $SETCOLOR_NORMAL failure else $PROGNAME $CONFIG 2>/dev/null RETVAL=$? [ $RETVAL -eq 0 ] && touch $LOCKFILE if [ $RETVAL -eq 0 ] ; then success; else failure; fi fi echo ;; stop) # Stop daemons. echo -n "Shutting down $SHOWNAME daemon: " pid=`cat $PIDFILE 2>/dev/null` if [ -z $pid ] ; then echo -n "PID file missing or empty" failure echo else if checkpidisours $pid ; then /bin/kill -TERM -- $pid 2>/dev/null RETVAL=$? if [ $RETVAL -eq 0 ] ; then success; else failure; fi echo [ $RETVAL -eq 0 ] && rm -f $LOCKFILE # Clear out all the old pid files # Clear out the old incoming dirs cd $WORKDIR && ls | xargs /bin/rm -rf else # this pid is no longer valid echo -n "PID " $SETCOLOR_WARNING echo -n $pid $SETCOLOR_NORMAL echo -n " is not $SHOWNAME" failure echo fi fi /bin/rm -f $PIDFILE ;; status) # Work out if all of MailScanner is running echo -n "Checking $SHOWNAME daemon: " pid=`cat $PIDFILE 2>/dev/null` if [ -z $pid ] ; then echo -n "PID file missing or empty" failure else if checkpidisours $pid ; then echo -n "running - PID " $SETCOLOR_WARNING echo -n $pid $SETCOLOR_NORMAL success else # this pid is no longer valid echo -n "PID " $SETCOLOR_WARNING echo -n $pid $SETCOLOR_NORMAL echo -n " is not $SHOWNAME" failure /bin/rm -f $PIDFILE fi fi echo ;; reload) echo -n "Reloading $SHOWNAME workers: " pid=`cat $PIDFILE 2>/dev/null` if [ -n $pid ] && checkpidisours $pid >/dev/null ; then childrenpid=`pgrep -d " " -P $pid` if [ -z "$childrenpid" ] ; then echo -n "No $SHOWNAME children PID(s)" failure else /bin/kill -HUP -- $childrenpid success fi else # this pid is no longer valid /bin/rm -f $PIDFILE echo -n "PID " $SETCOLOR_WARNING echo -n $pid $SETCOLOR_NORMAL echo -n " is not $SHOWNAME" failure fi echo ;; restart) $0 stop echo -n "Waiting for $SHOWNAME to stop..." sleep 5 echo $0 start RETVAL=$? ;; *) echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 esac exit $RETVAL