X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=files%2Fetc%2Finit.d%2Famavisd-cn.restore;fp=files%2Fetc%2Finit.d%2Famavisd-cn.restore;h=3f1b26ae4d997df0c83c5db19771895519166e38;hb=c9eea4899bbc037a064ae20a1cd2c9459a49afa8;hp=0000000000000000000000000000000000000000;hpb=ac1853d401b9f68550614afb960ddfcafdcb239a;p=carnet-upgrade.git diff --git a/files/etc/init.d/amavisd-cn.restore b/files/etc/init.d/amavisd-cn.restore new file mode 100755 index 0000000..3f1b26a --- /dev/null +++ b/files/etc/init.d/amavisd-cn.restore @@ -0,0 +1,167 @@ +#!/bin/sh + +# amavisd-cn /etc/init.d/ initscript wrapper for CARNetized amavisd-new +# +# Start and stop Amavis, ClamAV and Postfix/Sendmail + +### BEGIN INIT INFO +# Provides: amavisd-cn +# Required-Start: $local_fs $remote_fs $syslog $named $network $time +# Required-Stop: $local_fs $remote_fs $syslog $named $network +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop Amavis, ClamAV and Postfix/Sendmail +# Description: wrapper for starting/stopping MTA and related services +### END INIT INFO + +set -e + +# options for daemons: +# name init.d/script user ps name for pgrep -f pidfile, relative to /var/run num-fds last-fd-name +options=' +clamd clamav-daemon clamav /usr/sbin/clamd clamav/clamd.pid 5 clamav.log +amavis amavis.amavisd-new amavis amavisd \\(master\\) amavis/amavisd.pid 5 socket +' +# note: pgrep -f takes a regexp, and this is shell expanded once, hence \\ + +start () { + local daemon IFSOLD name script user psname pidfile num fdname + daemon="$1" + IFSOLD="$IFS" + IFS=" " # tab + read name script user psname pidfile num fdname <<-EOPTS + $(echo "$options" | sed 's/ */ /g' | grep ^$daemon) + EOPTS + IFS="$IFSOLD" + /etc/init.d/$script start + wait_for_fds "$daemon" +} + +stop () { + local daemon IFSOLD name script user psname pidfile num fdname + daemon="$1" + n=10 + IFSOLD="$IFS" + IFS=" " # tab + read name script user psname pidfile num fdname <<-EOPTS + $(echo "$options" | sed 's/ */ /g' | grep ^$daemon) + EOPTS + IFS="$IFSOLD" + /etc/init.d/$script stop + pkill -u $user -f "$psname" > /dev/null || true + while pgrep -u $user -f "$psname" > /dev/null && [ "$n" -gt 0 ] + do + sleep 1 + n=$(($n-1)) + done + pkill -9 -u $user -f "$psname" > /dev/null || true + #pkill -9 -u $user -x "$daemon" + if pgrep -u $user -f "$psname" > /dev/null; then # still there? + return 1 + fi +} + +wait_for_fds () { + # wait until process shows some I/O readiness :) + local name IFSOLD num sleep maxtry script user psname pidfile fdname + name="$1" + [ -z "$name" ] && return 1 + IFSOLD="$IFS" + IFS=" " # tab + read name script user psname pidfile num fdname <<-EOPTS + $(echo "$options" | sed 's/ */ /g' | grep ^$name) + EOPTS + IFS="$IFSOLD" + num=${num:-4} + sleep=${sleep:-1} + maxtry=${maxtry:-90} + if [ -n "$pidfile" ]; then + pidfile=/var/run/$pidfile + findpid="[ -f $pidfile ] && cat $pidfile || true" + else + findpid="pgrep -u $user -f \"$psname\" -P 1 | head -1" + fi + + # loop the loop the loop + try=1 + while /bin/true + do + sleep $sleep # 1st, give it a chance to run + pid=`eval $findpid` # 2nd: find it + if [ ! -z "$pid" ]; then + count=`ls -1 /proc/$pid/fd 2>/dev/null| wc -l` # 3rd: count all it's worth + [ "$count" -ge "$num" ] && ls -l /proc/$pid/fd | grep -q $fdname \ + && return # success -- release + fi + try=$(($try+1)) + [ "0$try" -ge "0$maxtry" ] && return 1 # no luck this time + done +} + +# if we're called as amavisd-cn or amavis with start argument, +# act like one; otherwise, pass the call down +case "$(basename $0)" in + amavisd-cn) + arg="i$1" + ;; + amavis) + if [ "$1" = start ]; then + arg="i$1" + else + arg="$1" + fi + ;; + *) + arg="$1" + ;; +esac + +# If there's no diversion, play possum +[ -x /etc/init.d/amavis.amavisd-new ] || exit 0 + +mta=postfix + +case "$arg" in + start|stop|restart|reload|force-reload|debug) + /etc/init.d/amavis.amavisd-new "$arg" + ;; + + istart) + start clamd + start amavis + if [ -x "/etc/init.d/$mta" ]; then + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then + invoke-rc.d $mta start + else + /etc/init.d/$mta start + fi + fi + ;; + + istop) + if [ -x "/etc/init.d/$mta" ]; then + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then + invoke-rc.d $mta stop + else + /etc/init.d/$mta stop + fi + fi + stop amavis + stop clamd + ;; + + irestart|ireload|iforce-reload) + $0 stop + sleep 2 + $0 start + ;; + + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0