#!/bin/sh set -e # Start or stop sendmail # # Robert Leslie # Johnie Ingram # David Rocher # Richard Nelson # How often to run the queue Q="10m" PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/sendmail COMMAND=/usr/sbin/sendmail PIDFILE=/var/run/sendmail.pid QUEUE=/var/spool/mqueue START_CMD="start-stop-daemon \ --pidfile $PIDFILE \ --exec $DAEMON \ --startas $COMMAND \ --start" STOP_CMD="start-stop-daemon \ --pidfile $PIDFILE \ --stop" NAME=sendmail FLAGS="defaults 50" # Support for coexistance with smtpd package SMTPD=/usr/sbin/smtpd test -x $DAEMON -a -d /usr/share/sendmail || exit 0 # # Clean sendmail queues (somewhat) queue_clean () { # remove lock files left because of kill/crash # rm -f $QUEUE/[lnx]f* doesn't work with a plethora of files ;-{ for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do rm -f [lnx]f${i}* done # remove zero length qf files for qffile in $QUEUE/qf*; do if [ -r "$qffile" -a ! -s "$qffile" ]; then echo -n " " rm -f "$qffile" fi done # rename tf files to be qf if the qf does not exist for tffile in $QUEUE/tf*; do qffile=`echo "$tffile" | sed 's/t/q/'` if [ -r "$tffile" -a ! -f "$qffile" ]; then echo -n " " mv "$tffile" "$qffile" elif [ -f "$tffile" ]; then echo -n " " rm -f "$tffile" fi done # remove df files with no corresponding qf files for dffile in $QUEUE/df*; do qffile=`echo "$dffile" | sed 's/d/q/'` if [ -r "$dffile" -a ! -f "$qffile" ]; then echo -n " " mv "$dffile" `echo $dffile | sed 's/d/D/'` fi done # announce files that have been saved during disaster recovery for xffile in $QUEUE/[A-Z]f*; do if [ -f "$xffile" ]; then echo -n " " fi done } # # enhanced sendmail startup start() { # cleanup queues queue_clean; # Skip daemon run for the following: # * sendmail hasn't been configured # * smptd, a firewall frontend for sendmail, is installed # * If running a nullclient if [ ! -s /etc/mail/sendmail.mc ]; then echo "sendmail has not been configured, not started." echo "To configure sendmail, type sendmailconfig" exit 0 elif [ -x $SMTPD ] || \ egrep -qe "^[[:space:]]*FEATURE(nullclient)" \ /etc/mail/sendmail.mc \ ; then echo "sendmail daemon not needed, not started." exit 0 fi # Ok, really start the puppy cd /var/lib/sendmail $START_CMD -- -bd -q"$Q" } # # enhanced sendmail shutdown stop () { $STOP_CMD --quiet --oknodo > /dev/null # # Now we have to wait until sendmail has _really_ stopped. # sleep 2 if $STOP_CMD --quiet > /dev/null; then echo -n "Waiting ." cnt=0 while $STOP_CMD --quiet > /dev/null; do cnt=`expr $cnt + 1` if [ $cnt -gt 60 ]; then # # Waited 120 seconds now. Fail. # echo -n " Failed " break fi sleep 2 echo -n "." done echo -n " Done " fi } case "$1" in start) echo -n "Starting mail transport agent: " start echo "$NAME." ;; stop) echo -n "Stopping mail transport agent: " stop echo "$NAME." ;; restart) $0 stop $0 start ;; reload) echo -n "Reloading $NAME configuration..." $STOP_CMD --signal HUP echo "done." ;; force-reload) $0 reload ;; debug) echo -n "Dumping $NAME state..." $STOP_CMD --signal USR1 echo "done." ;; *) echo "Usage: /etc/init.d/sendmail {start|stop|restart|reload|force-reload|debug}" exit 1 ;; esac exit 0