PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Postfix soll Script ausführen bei Incoming Mail



pascalvorsmann
16.05.04, 13:35
Folgendes Problem:
ich möchte das mein Postfix bei einer eingehenden Mail ein Script ausführt.

Hintergrund:
Ich habe eine USV, die an mehrere Rechner bei "Power OFF" eine Mail schreibt, woraufhin die Rechner herunterfahren sollen.

Mein Lösungsansatz bisher:
Ich habe einen Mailuser angelegt (/etc/postfix/virtual) welcher usv heisst, und die Mail an ein Alias weitergibt.

In der Aliasconfig /etc/postfix/alias habe ich nun versucht die Mail an ein script zu forwarden (usv: /etc/postfix/usv.sh) habe auch probiert (usv: |command /etc/postfix/usv.sh) bekomme aber immer folgende Fehlermeldung: (/etc/postfix/usv.sh: destination file is executable).
Habe daraufhin in meiner main.cf folgende zeilen hinzugefügt:
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
aber trotzdem gleiche Fehlermeldung ....

Was mache ich falsch oder ist dmein Lösungsansatz schon völlig verkehrt ...?

whyte
16.05.04, 14:52
kennst du procmail ???

pascalvorsmann
16.05.04, 15:31
schonmal gehört, aber noch nie benutzt :( ist aber auf dem Rechner installiert .... allerdings glaube ich muss mal wenn alle mails durch procmail jagen ...? habe aber einige hundert aliase, und will nicht alles ändern nur für ein einziges muss das file ausgeführt werden geht das mit procmail ..?

whyte
17.05.04, 14:31
hmm, dann höchstens wie bei majordomo in den /etc/aliases ein progi eintragen, was bei einem bestimmten user ausgeführt werden soll

pascalvorsmann
19.05.04, 00:11
in der aliases datei vom Postfix hatte ich es ja schon versucht wie oben beschrieben ... bekomme jedoch fehler ala executable script.... bin immer noch nicht weiter .... habe auch auf einem Testsystem versucht die Mails durch Procmail zu jagen und bei einem bestimmten user folgendes Auszuführen:
:0
{
:0
* ^TOusv
{
:0 c
| /etc/postfix/usv.sh
:0
root
}
}

was eine kopie der Mail zustellen, und das Script "usv.sh" ausführen soll, aber bin mir nicht sicher ob die Mails überhaupt durch den procmail laufen ..? der schreibt nirgends eine logdatei ..?! auch in messages steht nix :(

gibts nicht einen einfachen weg ein script auszuführen wenn ein user eine mail bekommt ...? wie funktionieren die Reply automatismen von Maillinglisten oder wie ein Autoresponder ...? muss doch gehen ...?!

pascalvorsmann
19.05.04, 00:12
Achja Procmail hatte ich im Postfix über die Zeile:
mailbox_command = mailbox_command = /usr/bin/procmail -p -t -m /etc/procmailrc
aktiviert (oder auch nicht lol)

Igge
19.05.04, 01:21
In der main.cf von Postfix muss folgendes stehen:

mailbox_command = /usr/bin/procmail


Dann kannst du die /etc/procmailrc (oder wie auch immer) anpassen. Ein Beispiel gibt's hier:

http://www.linux-magazin.de/Artikel/ausgabe/2002/01/procmail/procmail.html


Edit:
Zum Herunterfahren müsste folgendes klappen:


PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/.maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmail.log
VERBOSE=on

:0 Hc
* ^From: <Absender-Email>$
{
:0 B
* <Text, der im Body steht>
|init 0
}

:0
$default

pascalvorsmann
19.05.04, 08:00
Sorry Antwort gerade erst gelesen, hab bis heute Morgen um 3:00 gebastelt und habe nun eine Möglichkeit ;)

Also habe mir folgende kleine Howto für später geschrieben:
Zuerst musste der Postfix gedrillt werden um überhaupt Scripte ausführen zu können.
Das habe ich erreicht durch hinzufügen folgender Zeilen in der main.cf:
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include

Danach habe ich einen Virtuellen Mailaccount eingerichtet (Datei virtual):
usv@domain.de usv

(Postmap auf das geänderte File nicht vergessen!)
postmap /etc/postfix/virtual

Danach habe ich ein Alias eingerichtet, welches alle weiteren Hosts benachrichtigt
(Kommata getrennt) und welches ein Postfix kompatibles Script (usv.inc) ausführt:
(Datei aliases)
usv: weitererechner@netzwerk.de, :include:/etc/postfix/usv.inc

Nun habe ich das "Postfix" Script in Procmail kompatibler Sprache angelegt (Procmail brauchte ich garnicht ... Postfix kann des scheinbar schon ganz ohne ..?!)
Datei :"/etc/postfix/usv.inc" (Rechte:root 644)
:0
{
:0
* ^TOusv
{
:0 c
| /etc/postfix/usv.sh
}
}

Dieses Script wiederum initialisiert das eigentliche USV Script, womit der Rechner heruntergefahren wird. Doch bevor dieses Script auch unter dem Benutzer des Postfix ausgeführt werden konnte, musste ich ihm die entsprechenden Rechte mit auf den Weg geben.
Das habe ich via sudo realisiert:
mit dem Befehl visudo habe ich folgendes in die /etc/sudoers eingetragen (Angenommen nobody ist der User des Mailsystems!):
User_Alias USV = nobody
USV ALL=NOPASSWD: /etc/postfix/usv.sh





Abschliessend noch das Script Ausführhrbar anlegen und fertig war das Werk ;)
Datei :"/etc/postfix/usv.sh" (root 755)
!/bin/sh
if test $UID -ne 0; then
exec sudo $0 $*
fi
# Mailbenachrichtigung an andere Systeme auslösenden Host o.ä.
echo USV Power Lost Shutdown in 60 Sec |mail -s'***USV*** Shutdown' andererechnerimnetz@domane.de
sleep 60 >/dev/null
/sbin/shutdown -h now


Wenn ich nun eine Mail schreibe an usv@domain.de wird eine Mail an die übrigen Rechner geschrieben, welche herunterfahren sollen, und nach 60 Sekunden fährt der Server sauber runter ;)