RE: [ERLEDIGT]email Logs für Kunden - rbtux - 01-31-2009 09:07 AM
es wäre besser auf die Message ID zu greppen, dann siehst du auch wer das ganze einliefert...
ich hab da kurz was zusammengeflickt, ist zwar nicht schön, sollte aber funktionieren...
Code:
#!/bin/bash
deleteafterdays=184
if [ "$1" = "" ]; then
echo "Parameter: usermaillog <Domain/Aliasdomain> <optional Hauptdomain>"
else
DATUM=`date '+%Y-%m-%d'`
if [ "$2" != "" ]; then
if [ -d /var/www/virtual/$1 ]; then
serverdomain=$1
else
serverdomain=$2
fi
else
serverdomain=$1
fi
if [ -d /var/www/virtual/$serverdomain ]; then
# Berechtigung des Domainverzeichnisses ermitteln
LG=`stat -c%U /var/www/virtual/$serverdomain`
find /var/www/virtual/$serverdomain/logs/mail_$1* -mtime +$deleteafterdays -exec rm {} \; >/dev/null 2>&1
echo "" > /var/www/virtual/$serverdomain/logs/mail_$1_$DATUM
grep $1 /var/log/mail.log | grep postfix | cut -d ":" -f 4 | uniq | sed 's/^[ \t]*//;s/[ \t]*$//' > /tmp/usermaillog.tmp
while read zeile; do
grep $zeile /var/log/mail.log >> /var/www/virtual/$serverdomain/logs/mail_$1_$DATUM
done < /tmp/usermaillog.tmp
rm /tmp/usermaillog.tmp
# Berechtigung auf die angelegte Datei ändern
chown $LG:$LG /var/www/virtual/$serverdomain/logs/mail_$1_$DATUM
else
echo "Fehler: Verzeichnis /var/www/virtual/$serverdomain existiert nicht."
fi
fi
Funktioniert natürlich nur richtig, wenn der spam filter als smtp_proxy und nicht als content filter läuft... (naja content filter ist ja sowiso bullshit ;-))
RE: [ERLEDIGT]email Logs für Kunden - Knut - 01-31-2009 04:29 PM
Eine kleine "Verbesserung" habe ich noch eingefügt.
Sollte das Script zweimal zur gleichen Zeit laufen, würde das gleiche TMP-File verwendet werden.
Durch
Code:
TMPFILE=`mktemp /tmp/usermail.XXXXXXXX`
wird eine eindeutiges File erzeugt und in der Variable $TMPFILE gemerkt. Weiter unten im Code wurde entsprechend die Variable eingesetzt.
Code:
#!/bin/bash
deleteafterdays=184
TMPFILE=`mktemp /tmp/usermail.XXXXXXXX`
if [ "$1" = "" ]; then
echo "Parameter: usermaillog <Domain/Aliasdomain> <optional Hauptdomain>"
else
DATUM=`date '+%Y-%m-%d'`
if [ "$2" != "" ]; then
if [ -d /var/www/virtual/$1 ]; then
serverdomain=$1
else
serverdomain=$2
fi
else
serverdomain=$1
fi
if [ -d /var/www/virtual/$serverdomain ]; then
# Berechtigung des Domainverzeichnisses ermitteln
LG=`stat -c%U /var/www/virtual/$serverdomain`
find /var/www/virtual/$serverdomain/logs/mail_$1* -mtime +$deleteafterdays -exec rm {} \; >/dev/null 2>&1
echo "" > /var/www/virtual/$serverdomain/logs/mail_$1_$DATUM
grep $1 /var/log/mail.log | grep postfix | cut -d ":" -f 4 | uniq | sed 's/^[ \t]*//;s/[ \t]*$//' > $TMPFILE
while read zeile; do
grep $zeile /var/log/mail.log >> /var/www/virtual/$serverdomain/logs/mail_$1_$DATUM
done < $TMPFILE
rm $TMPFILE
# Berechtigung auf die angelegte Datei ändern
chown $LG:$LG /var/www/virtual/$serverdomain/logs/mail_$1_$DATUM
else
echo "Fehler: Verzeichnis /var/www/virtual/$serverdomain existiert nicht."
fi
fi
Ruft man das Script auf der Console auf kommt übrigens eine kleine Fehlermeldung. Die grep-/find- Kombination fügt in das TMP-File mit den Message-ID noch zwei weitere Zeilen ein:
Code:
weighted check
NOQUEUE
(Zumindest ist es bei mir so)
Die Logs werden aber weiter brav angelegt.
Gruß Knut
RE: [ERLEDIGT]email Logs für Kunden - rbtux - 01-31-2009 10:43 PM
jop der grep auf die Message-ID kann sicher besser gemacht werden ;-) Aber in Bash? ich weiss nicht...
RE: [ERLEDIGT]email Logs für Kunden - Knut - 05-31-2009 02:50 AM
(01-31-2009 07:46 AM)BeNe Wrote: Perfekt! Danke für die Arbeit!
Kann ich euch dann bitten das ins Wiki zu übernehmen ?
Macht ja durchaus sinn in einigen Fällen es dem Kunden zu verfügung zu stellen.
Greez BeNe
Done.
http://www.isp-control.net/documentation/de/howto/mail/maillogs_fuer_kunden
RE: [ERLEDIGT]email Logs für Kunden - BeNe - 05-31-2009 07:20 AM
Thanks @Knut für den Eintrag!
Also wenn das alles so passt, dann bin ich fast dafür das mal in den trunk zu übernehmen. Sinn macht es aus meiner Sicht! Super idee.
Greez BeNe
|