Autor Thema: Was stimmt mit diesem Skript nicht?  (Gelesen 2743 mal)

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Was stimmt mit diesem Skript nicht?
« am: 28. November 2008, 11:00:43 »
ich steh mal wieder voll auf dem schlauch. ich habe das init-skript /etc/init.d/sendmail angepasst um ebenfalls milter-regex zu starten/stoppen. das mit dem starten funktioniert auch auch ohne probleme. aber beim stoppen wird nur der sendmail gestoppt und dann hoert das skript einfach ohne fehlermeldung auf. ich habe ein paar echo mit eingebaut um zu sehen wie weit das skript beim stoppen laeuft. ich bekomme nur 'affe 1' zu sehen.

#!/sbin/sh

# This Part is for Sendmail itself
ERRMSG1='WARNING: /var/mail is NFS-mounted without setting actimeo=0,'
ERRMSG2='this can cause mailbox locking and access problems.'
SERVER_PID_FILE="/var/run/sendmail.pid"
CLIENT_PID_FILE="/var/spool/clientmqueue/sm-client.pid"
DEFAULT_FILE="/etc/default/sendmail"
ALIASES_FILE="/etc/mail/aliases"

# This Part is for Milter
configfile="/etc/mail/milter-regex.conf"
basedir="/var/milter-regex"
pidfile="$basedir/milter-regex.pid"
socket="local:/var/milter/milter-regex.socket"
socketf="/var/milter/milter-regex.socket"
user="root"




check_queue_interval_syntax()
{
        default="15m"
        if [ $# -lt 1 ]; then
                answer=$default
                return
        fi
        if echo $1 | egrep '^([0-9]*[1-9][0-9]*[smhdw])+$' >/dev/null 2>&1; then
                answer=$1
        else
                answer=$default
        fi
}

case "$1" in
'restart')
        [ -f $SERVER_PID_FILE ] && kill -1 `head -1 $SERVER_PID_FILE`
        [ -f $CLIENT_PID_FILE ] && kill -1 `head -1 $CLIENT_PID_FILE`
        ;;

'start')
        /usr/bin/logger -p mail.info Running the init-script for Sendmail

        if [ -f /usr/local/bin/milter-regex -a -f $configfile ]; then
                if [ -f $socketf ]; then
                        rm -r $socketf
                fi
                /usr/bin/logger -p mail.info Starting Milter-Regex
                /usr/local/bin/milter-regex -u $user -c $configfile -p $socket
        fi

        if [ -f /usr/lib/sendmail -a -f /etc/mail/sendmail.cf ]; then
                if [ ! -d /var/spool/mqueue ]; then
                        /usr/bin/mkdir -m 0750 /var/spool/mqueue
                        /usr/bin/chown root:bin /var/spool/mqueue
                fi
                if [ ! -f $ALIASES_FILE.db ] && [ ! -f $ALIASES_FILE.dir ] \
                    && [ ! -f $ALIASES_FILE.pag ]; then
                        /usr/sbin/newaliases
                fi
                MODE="-bd -X /var/syslog/maildump"
                [ -f $DEFAULT_FILE ] && . $DEFAULT_FILE
                #
                # * MODE should be "-bd" or null (MODE= or MODE="") or
                #   left alone.  Anything else and you're on your own.
                # * QUEUEOPTION should be "p" or null (as above).
                # * [CLIENT]QUEUEINTERVAL should be set to some legal value;
                #   sanity checks are done below.
                # * [CLIENT]OPTIONS are catch-alls; set with care.
                #
                if [ -n "$QUEUEOPTION" -a "$QUEUEOPTION" != "p" ]; then
                        QUEUEOPTION=""
                fi
                if [ -z "$QUEUEOPTION" -o -n "$QUEUEINTERVAL" ]; then
                        check_queue_interval_syntax $QUEUEINTERVAL
                        QUEUEINTERVAL=$answer
                fi
                check_queue_interval_syntax $CLIENTQUEUEINTERVAL
                CLIENTQUEUEINTERVAL=$answer
                /usr/lib/sendmail $MODE -q$QUEUEOPTION$QUEUEINTERVAL $OPTIONS &
                /usr/lib/sendmail -Ac -q$CLIENTQUEUEINTERVAL $CLIENTOPTIONS &
                #
                # ETRN_HOSTS should be of the form
                # "s1:c1.1,c1.2        s2:c2.1 s3:c3.1,c3.2,c3.3"
                # i.e., white-space separated groups of server:client where
                # client can be one or more comma-separated names; N.B. that
                # the :client part is optional; see etrn(1M) for details.
                # server is the name of the server to prod; a mail queue run
                # is requested for each client name.  This is comparable to
                # running "/usr/lib/sendmail -qRclient" on the host server.
                #
                # See RFC 1985 for more information.
                #
                for i in $ETRN_HOSTS; do
                        SERVER=`echo $i | /usr/bin/sed -e 's/:.*$//'`
                        CLIENTS=`echo $i | /usr/bin/sed -n -e 's/,/ /g' \
                            -e '/:/s/^.*://p'`
                        /usr/sbin/etrn $SERVER $CLIENTS >/dev/null 2>&1 &
                done
        fi

        if /usr/bin/nawk 'BEGIN{s = 1}
            $2 == "/var/mail" && $3 == "nfs" && $4 !~ /actimeo=0/ &&
            $4 !~ /noac/{s = 0} END{exit s}' /etc/mnttab; then

                /usr/bin/logger -p mail.crit "$ERRMSG1"
                /usr/bin/logger -p mail.crit "$ERRMSG2"
        fi
        ;;

'stop')
        [ -f $SERVER_PID_FILE ] && kill `head -1 $SERVER_PID_FILE`
        if [ -f $CLIENT_PID_FILE ]; then
                kill `head -1 $CLIENT_PID_FILE`
                rm -f $CLIENT_PID_FILE
        fi
        /usr/bin/logger -p mail.info Stopping Sendmail
        echo affe 1
        /usr/bin/pkill -x -u 0 sendmail
        echo affe 2
        /usr/bin/logger -p mail.info Stopping Milter-Regex
        echo affe 3
        /usr/bin/pkill -x -u 0 milter-regex
        echo affe 4
        rm -r $socketf
        ;;

*)
        echo "Fucking Usage is: $0 { start | stop | restart }"
        exit 1
        ;;
esac
exit 0

nicht mein eigentliches problem aber vielleicht weiss ja einer von euch weiter. wie kann ich testen ob eine socket-datei existent ist? ein '[ -f socketdatei ]' funktioniert scheinbar nicht. folgendes zeigt keine wirkung.
socketf="/var/milter/milter-regex.socket"
if [ -f $socketf ]; then
   rm -r $socketf
fi


ct,

sonnenblen.de - Das unabhängige Sun User Forum

Was stimmt mit diesem Skript nicht?
« am: 28. November 2008, 11:00:43 »

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Was stimmt mit diesem Skript nicht?
« Antwort #1 am: 28. November 2008, 11:14:46 »
Moin,

dein init Script heisst "sendmail" und damit wird dein "pkill -x -u 0 sendmail" eben dieses Script auch killen.
Probier mal den Aufruf per "/etc/rc?.d/K??sendmail stop"

Falls du ein Solaris 10 hast, so wuerde ich die raten ein SMF Manifest zu bauen. Mittels SMF kannst du einfacher die "richtigen" sendmail Prozesse fuer den kill identifizieren (dein Beispiel-Skript wird z.B. auch die sendmail Prozesse von non-global Zones killen falls solche laufen).

Tschau,
  Drusus.

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Was stimmt mit diesem Skript nicht?
« Antwort #2 am: 28. November 2008, 11:20:36 »
Moin,

und noch zu der zweiten Frage: die sh bietet keinen solchen Test in dem buildin test via [].
Workaround: nimm /bin/test wo dann es dann ein -S gibt, also z.B.

socketf="/var/milter/milter-regex.socket"
if /bin/test -S $socketf ; then
   rm -r $socketf
fi

Tschau,
  Drusus.

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Was stimmt mit diesem Skript nicht?
« Antwort #3 am: 28. November 2008, 11:31:30 »
Hallo Drusus,

grrr, auf die idee erst mal kommen. aber du hast recht, natuerlich schiesst sich das script mit dem pkill selbst ab.

aber '[' ist doch kein buildin test der /bin/sh. ich habe sogar eine datei namens '['. und ich dachte ich haette mal irgendwo gelesen das die datei '[' auch nur ein link auf test ist. ich werd's in den naechsten stunden ausprobieren.

ct,

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Was stimmt mit diesem Skript nicht?
« Antwort #4 am: 28. November 2008, 12:43:01 »
Moin,

die sh (und auch die anderen Shells) nutzen per Default ein shell buildin fuer [] und test. Und genau dort gibt es in der sh kein -S. Das ganze ist zu finden in "man -s1 test".

Tschau,
  Drusus.

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Was stimmt mit diesem Skript nicht?
« Antwort #5 am: 28. November 2008, 13:26:33 »
yup, du hast recht. das skript arbeitet nun so wie's soll ohne zu mucken.

ct,