Cronjobs unter FreeBSD

findus

a nice one
Hallo Forum,

folgendes Szenario:
Der Mail-Relay unser Firma steht in der DMZ, empfängt/versendet eMails und filtert diese auf Spam. Dabei ist dies nicht unser eigentlicher Mail-Server sondern nur ein Relay für den bei uns im internen Netz stehenden Exchange 2003 Server, der die interne eMail-Kommunikation übernimmt.

Im Prinzip arbeitet dieser sehr gut, allerdings liegt es ja nahe diesen von Zeit zu Zeit über ein kleines Skript mit nicht erkannten Spam-Mails (die Trefferquote liegt bei ca. 95 %) zu füttern. Ein Skript, welches nicht erkannten SPAM in ein Zip-Archiv schreibt und dieses Archiv von einem unserer Netzlaufwerke mittels FTP auf den Mail-Relay verschiebt habe ich geschrieben und läuft einwandfrei (Batch-Skript für Windows, welches ich bei interesse gerne poste).

Nun versuche ich mich in einem Shell-Skript, welches dieses Archiv auspackt und die SPAM-Mails Spamassiss zum lernen weiterreicht - all das loggt u. die Daten im Anschluß löscht. Manuell aufgerufen funktioniert es wunderbar (!) nur bekomme ich Probleme wenn ich dieses über die Crontab des Users spam (welcher auch die Spam-Datenbank verwaltet) aufrufen lassen will:

Das Skript:
#/bin/sh
cd > ~/ausgabe.txt
unzip ~/NEU.ZIP -d ~/spam >> ~/ausgabe.txt
cp ~/skripte/leer ~/spam >> ~/ausgabe.txt
cd ~/spam >> ~/ausgabe.txt
/bin/sh ~/spam/leer >> ~/ausgabe.txt
sa-learn -C /usr/local/etc/mail/spamassassin/local.cf --forget ~/spam/* >> ~/ausgabe.txt
sa-learn -C /usr/local/etc/mail/spamassassin/local.cf --spam ~/spam/* >> ~/ausgabe.txt
cat ~/ausgabe.txt | mail -s Spam-Training bla@bla.de >> ~/ausgabe.txt
rm -rf ~/spam/* >> ~/ausgabe.txt
rm ~/NEU.ZIP >> ~/ausgabe.txt
und die Crontab des Users spam (crontab -e):
# crontab - spam's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin/
HOME=/home/spam/
#MAILTO=bla@bla.de
#
#minute hour mday month wday who command
#
30 14 * * * * ~/skripte/start.sh

Als Fehlermeldung erhalte ich:
NEU.ZIP: not found (ist allerdings da)
Auch das Schreiben in die ausgabe.txt gelingt nicht.

Er kommt also mit den Pfaden nicht zurecht, allerdings komme ich nicht darauf was ich ändern müsste damit es ordentlich funktioniert. Und das Logging in die ausgabe.txt habe ich nur interesse halber hinzugefügt - die hälfte von dem lösche ich nachher wieder weg.

Gruß Björn
 
Geändert hat sich nix - ich bekomme immer noch die Meldung:
Neu.zip not found

Das Skript sieht nun wie folgt aus:
#/bin/sh
cd > /home/spam/ausgabe.txt
unzip /home/spam/NEU.ZIP -d /home/spam/spam >> /home/spam/ausgabe.txt
cp /home/spam/skripte/leer /home/spam/spam >> /home/spam/ausgabe.txt
cd /home/spam/spam >> /home/spam/ausgabe.txt
/bin/sh /home/spam/spam/leer >> /home/spam/ausgabe.txt
sa-learn -C /usr/local/etc/mail/spamassassin/local.cf --forget /home/spam/spam/* >> /home/spam/ausgabe.txt
sa-learn -C /usr/local/etc/mail/spamassassin/local.cf --spam /home/spam/spam/* >> /home/spam/ausgabe.txt
cat /home/spam/ausgabe.txt | mail -s Spam-Training bla@bla.de >> /home/spam/ausgabe.txt
rm -rf /home/spam/spam/* >> /home/spam/ausgabe.txt
rm /home/spam/NEU.ZIP >> /home/spam/ausgabe.txt

Aber trotzdem vielen Dank für deine Idee (nur warum sind ~/ u. Konsort keine ordentlichen Pfadangaben?)

Gruß Björn
 
Du arbeitest auch immernoch nicht mit kompletten Pfadangaben!

z.B.

/usr/local/bin/unzip /home/spam/NEU.ZIP -d /home/spam/spam >> /home/spam/ausgabe.txt

Gruß,

Ice
 
Das ist ja 100 % ecklig. Habe die Datei jetzt nochmal angepasst, verändert hat sich nüx (:()
#/bin/sh
/usr/bin/cd > /usr/home/spam/ausgabe.txt
/usr/local/bin/unzip /usr/home/spam/NEU.ZIP -d /usr/home/spam/spam >> /usr/home/spam/ausgabe.txt
/bin/cp /usr/home/spam/skripte/leer /usr/home/spam/spam >> /usr/home/spam/ausgabe.txt
/usr/bin/cd /usr/home/spam/spam >> /usr/home/spam/ausgabe.txt
/bin/sh /usr/home/spam/spam/leer >> /usr/home/spam/ausgabe.txt
/usr/local/bin/sa-learn -C /usr/local/etc/mail/spamassassin/local.cf --forget /usr/home/spam/spam/* >> /usr/home/spam/ausgabe.txt
/usr/local/bin/sa-learn -C /usr/local/etc/mail/spamassassin/local.cf --spam /usr/home/spam/spam/* >> /usr/home/spam/ausgabe.txt
/bin/cat /usr/home/spam/ausgabe.txt | /usr/bin/mail -s Spam-Training bla@bla.de >> /usr/home/spam/ausgabe.txt
/bin/rm -rf /usr/home/spam/spam/* >> /usr/home/spam/ausgabe.txt
#/usr/bin/rm /usr/home/spam/NEU.ZIP >> /usr/home/spam/ausgabe.txt

Muss ich vllt. etwas ander HOME oder Path-Variablen etwas ändern?

Gruß Björn
 
Zur generellen Information aus:
http://www.freebsd.ch/doc/de_DE.ISO8859-1/books/handbook/configtuning-cron.html
Umgebungsvariablen werden mit dem Gleichheits-Zeichen (=) festgelegt. Im Beispiel werden die Variablen SHELL, PATH und HOME definiert. Wenn die Variable SHELL nicht definiert wird, benutzt cron die Shell sh. Wird die Variable PATH nicht gesetzt, müssen alle Pfadangaben absolut sein, da es keinen Vorgabewert für PATH gibt. Der Vorgabewert für HOME ist das Heimatverzeichnis des Accounts, dem die crontab gehört.
Ich sehe den Fehler nicht, aber ich würde folgendes mal ausprobieren:

Code:
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/[B]bin[/B]
HOME=[B]/usr/home/spam[/B]

Code:
 #/bin/sh
[B]pwd[/B] > /home/spam/ausgabe.txt
 
Noch eine Tipp dazu:

/usr/local/bin/unzip /usr/home/spam/NEU.ZIP -d /usr/home/spam/spam >> /usr/home/spam/ausgabe.txt

Benutze doch Variablen, dann wirds übersichtlicher...

zBsp.:
SPAM=/usr/home/spam
SPAM2=/usr/home/spam/spam

unzip $SPAM/NEU.ZIP -d $SPAM2 >> $SPAM/ausgabe.txt

Greetz
 
AndreasMeyer schrieb:
Code:
 #/bin/sh
[B]pwd[/B] > /home/spam/ausgabe.txt
Wie kann es sein, das bei diesem Skript ebenfalls ein:
NEU.ZIP cannot found mir per eMail zugesendet wird?

die Crontab des Users spam: (crontab -e als user spam)
# crontab - spam's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
HOME=/usr/home/spam
MAILTO=bla@bla.de
#
#minute hour mday month wday who command
#
18 12 * * * * /usr/home/spam/skripte/start.sh
16 12 * * * * /usr/home/spam/skripte/test

Mir scheint das da ein ziemlich arges Problem vorliegt...

Gruß Björn
 
bsd69 schrieb:
Noch eine Tipp dazu:

/usr/local/bin/unzip /usr/home/spam/NEU.ZIP -d /usr/home/spam/spam >> /usr/home/spam/ausgabe.txt

Benutze doch Variablen, dann wirds übersichtlicher...

zBsp.:
SPAM=/usr/home/spam
SPAM2=/usr/home/spam/spam

unzip $SPAM/NEU.ZIP -d $SPAM2 >> $SPAM/ausgabe.txt

Greetz
Danke für den Tipp - wenn der Cronjob ersteinmal vernünftig arbeitet werde ich mich damit beschäftigen.

Gruß Björn
 
Fehler gefunden:

Der Syntax der persönlichen Aufgabenliste ist gleich der systemweiten Aufgabenliste /etc/crontab, jedoch ohne die Spalte "who" (Benutzeraccount unter welchem der Befehl ausgeführt werden soll). Korrekt wäre:

Code:
#minute hour mday month wday command
#
30 14 * * * ~/skripte/start.sh

Ansonsten gibt cron die Meldung heraus, dass das erste Objekt im HOME-Verzeichnis nicht gefunden wurde.
 
... und anschließend wirst du das Problem bekommen, das die .msg Dateien aus Outlook / Exchange nicht von SpamAssassin gelesen werden können, und bei seltsamen Zeichen im Betreff (-> Dateinamen) der Lernvorgang schonmal abbricht.

Damit du dich damit nicht noch rumschlagen musst, hier meine Lösung (nehmen wir mal an du sortierst die Mails mit deinem Script in /usr in die Unterordner "spam" und "ham"):

Code:
...
cd /usr/autolearn/spam
/usr/local/bin/mvb -i spam
cd /usr/autolearn/ham
/usr/local/bin/mvb -i ham
for i in /usr/autolearn/spam/*.msg; do /usr/local/bin/msgconvert $i >> /usr/autolearn/spam-mbox -v; done;
for i in /usr/autolearn/ham/*.msg; do /usr/local/bin/msgconvert $i >> /usr/autolearn/ham-mbox -v; done;
/usr/local/bin/sa-learn --mbox --no-sync --spam /usr/autolearn/spam-mbox
/usr/local/bin/sa-learn --mbox --no-sync --ham /usr/autolearn/ham-mbox
/bin/rm  -rf /usr/autolearn/spam/
/bin/rm  -rf /usr/autolearn/ham/
/bin/rm  /usr/autolearn/spam-mbox
/bin/rm  /usr/autolearn/ham-mbox
/bin/mkdir /usr/autolearn/spam/
/bin/mkdir /usr/autolearn/ham/

Installieren musst du vorher noch das Programm "msgconvert" und das rename-Script, wie hier beschrieben.

Viel Spass damit (wenn's hilft).
 
Ne0n schrieb:
Viel Spass damit (wenn's hilft).
Vielen Dank, dies tut es. :)

Das einzige mit dem ich mich jetzt noch beschäftigen werde, ist die Frage ob ich Mails die nicht erkannt worden sind, noch einmal vergessen lasse(sa-learn --forget):
Ich hoffe es ja nicht, aber ich kann ja nicht ausschließen das die Mails als HAM gelernt worden sind.

Na gut, das soll aber nicht euer Problem sein (evt. nen Denkanstoß?)

Vielen Dank auf jedenfall für das Skript und den Tipp vom Andi ;)

Gruß Björn
 
Zurück
Oben