Hallo.
Ich habe nen Shellscript für mein mail2fax Gateway geschrieben welches ich als Root problemlos auf der Shell ausführen kann. Wenn ich für dieses Script nun nen Cronjob anlege, welcher von Root ausgeführt wird funktioniert es allerdings nicht.
Ich erhalte die Fehlermeldung, dass /tmp/fax2mail nicht gelöscht werden konte, weil es nicht existiert. Das Problem scheint irgendwo bei csplit zu liegen. Ich komm aber nicht drauf wo es genau klemmt?
Hab auch schon versucht die Ausgabe von cron zu loggen (mittels ">>/tmp/error 2>&1"). Im Log waren dann aber keine Fehlermeldungen, ">>sondern nur die normalen Stausmeldungen.
Hat jemand ne idee, was ich falsch mache? Als Root kanns doch eigentlich an den Berechtigungen mangeln?
Hier noch das Script: [code] #!/bin/sh
#config frommail="ich@bla.de" # for csplit dialprefix="0"
# script if [ -e /var/mail/faxmaster ]; then
/usr/bin/csplit -f fax -n 3 -k -s -z /var/mail/faxmaster "/From ${frommail} /" {*}
for fax in `ls /var/spool/hylafax/bin | grep fax[0-9] | sed 's/fax//'` do
cat /var/spool/hylafax/bin/fax${fax} | mimedecode | /var/spool/hylafax/bin/appendheaders.pl > /tmp/mail2fax
subject=`grep .*Subject:.*[Ticket#:.[0-9]] /tmp/mail2fax`
nr=`echo $subject | sed 's/Subject:.*[Ticket#: [0-9]{16}] //'`
cat /tmp/mail2fax | sed '1,/^$/d' | head -n -20 | a2ps -1 -c -q -B --borders=no -o - | sendfax -d ${dialprefix}${nr}
rm /var/spool/hylafax/bin/fax${fax}
done
rm /tmp/mail2fax /var/mail/faxmaster
fi [/code]
am 06.09.2005, um 18:26:42 +0200 mailte Andre Bauer folgendes:
Ich habe nen Shellscript für mein mail2fax Gateway geschrieben welches ich als Root problemlos auf der Shell ausführen kann. Wenn ich für dieses Script nun nen Cronjob anlege, welcher von Root ausgeführt wird funktioniert es allerdings nicht.
Ein gern gemachter Fehler ist, zu übersehen, daß Du (und auch root) im Cron kein Environment hast. Damit auch keine Pfade.
Ich erhalte die Fehlermeldung, dass /tmp/fax2mail nicht gelöscht werden konte, weil es nicht existiert. Das Problem scheint irgendwo bei csplit zu liegen. Ich komm aber nicht drauf wo es genau klemmt?
Mmh... Es scheint dann wohl doch woanders zu liegen.
cat /var/spool/hylafax/bin/fax${fax} | mimedecode | /var/spool/hylafax/bin/appendheaders.pl > /tmp/mail2fax subject=`grep .*Subject:.*[Ticket#:.[0-9]] /tmp/mail2fax` nr=`echo $subject | sed 's/Subject:.*[Ticket#: [0-9]{16}] //'`
Du bist sicher, daß mimedecode, grep, sed gefunden werden?
Andreas, sich nicht sicher seiend...
am 06.09.2005, um 18:26:42 +0200 mailte Andre Bauer folgendes:
Ich habe nen Shellscript für mein mail2fax Gateway geschrieben welches ich als Root problemlos auf der Shell ausführen kann. Wenn ich für
Wenn es "nur" am cron liegt, würde ich auch sagen, das die environments nicht richtig sitzen. Setze mal ein env bzw. set im script ab.
Gruß Steffen
Hallo.
Hier mal was dabei rauskommt...
ENV:
SHELL=/bin/sh PATH=/usr/bin:/bin _=/usr/bin/env PWD=/root LANG=de_DE@euro HOME=/root SHLVL=2 LANGUAGE=de_DE:de:en_GB:en LOGNAME=root
SET:
BASH=/bin/sh BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-pc-linux-gnu") BASH_VERSION='2.05b.0(1)-release' DIRSTACK=() EUID=0 GROUPS=() HOME=/root HOSTNAME=LinuxTest HOSTTYPE=i386 IFS=' ' LANG=de_DE@euro LANGUAGE=de_DE:de:en_GB:en LOGNAME=root MACHTYPE=i386-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/bin:/bin PIPESTATUS=([0]="0") POSIXLY_CORRECT=y PPID=13737 PS4='+ ' PWD=/root SHELL=/bin/sh SHELLOPTS=braceexpand:hashall:interactive-comments:posix SHLVL=2 TERM=dumb UID=0 _=env
Hm... wenn keine sbin's dabei sind sollte ja PATH i.o. sein. Auf den ersten Blick sehe ich nix ... was aber unbedeutend ist ;) ich verwende auch kein hylafax nur so viel: an den rechten liegts nicht.
versuche mal ein wenig zu debuggen. am besten du baust dir ein kleines script, welches dein script aufruft und alle ausgaben in eine datei umleitet. dieses kleine pre-script startest dann mal über dein cron.
sorry, ich hab keine bessere idee ;)
Gruß
Hallo.
Danke erstmal. An Hylafax selbst scheints auch nicht zu liegen, da schon die /tmp/mail2fax nicht erstellt wird. Das Problem scheint irgendwie mit csplit zusammen zu hängen.
Werd morgen mal das vorgeschlagene Script schreibeun und posten was dabei rauskommt.
Andre Bauer wrote:
Hallo.
Hier mal was dabei rauskommt...
ENV:
[...]
SET:
[...]
Vielleicht liegt's ja auch einfach daran, daß cron kein tty zur Verfügung stellt. Versuche mal, deinen cronjob in nem Screen zu starten, also so in der Art:
/usr/bin/screen -S cronscript -d -m /where/ever/the/cron/script/is
Ciao, Thomas
Hallo.
War auch mein erster Gedanke. Hab es aber auch schon mit absoluten Pfaden zu allen Dateien versucht. Selbes Ergebnis.
On 06.09.05 Andreas Kretschmer (andreas.kretschmer@schollglas.com) wrote:
Moin,
Ein gern gemachter Fehler ist, zu übersehen, daß Du (und auch root) im Cron kein Environment hast. Damit auch keine Pfade.
Der Mailserver Deines Providers scheint einen Hickup zu haben (mrelayeu.kundenserver.de). Der kriegt noch eine Mail, sendet aber zwei an moutng.kundenserver.de weiter. Meint Du da kann man was machen?
H.
Hi,
Andre Bauer monotek@freakmail.de (Di 06 Sep 2005 18:26:42 CEST):
Hallo. Ich erhalte die Fehlermeldung, dass /tmp/fax2mail nicht gelöscht werden konte, weil es nicht existiert. Das Problem scheint irgendwo bei csplit zu liegen. Ich komm aber nicht drauf wo es genau klemmt?
Ok, dann ist also Die 'for fax in ...'--Schleife nicht einmal ausgeführt worden, weil sonst, egal, ob mimedecode und die anderen Konsorten gefunden werden, je wenigstens /tmp/mail2fax angelegt worden wäre (das tut die Shell, *bevor* sie merkt, daß die entsprechende Zeile vielleicht garnicht gehen kann.
Warum eigentlich '/usr/bin/csplit' und nicht einfach 'csplit' -- hast Du noch andere davon?
Setze lieber PATH, wenn Du Dich auf bestimmte Dinge verlassen willst. Oder noch 'eleganter': csplit() { /usr/bin/csplit "$@"; } Aber das hat mit Deinem Problem ja nichts zu tun.
#!/bin/sh
#config frommail="ich@bla.de" # for csplit dialprefix="0"
# script if [ -e /var/mail/faxmaster ]; then
/usr/bin/csplit -f fax -n 3 -k -s -z /var/mail/faxmaster "/From ${frommail} /" {*}
In welchem Verzeichnis bist Du eigentlich? Wenn Cron Deinen Script startet, ist er in ... ja - was sagen die Experten, ich denke in ~root ...
Wenn Du das Script per Hand startest, bist Du vielleicht zufällig in /var/spool/hylafax/bin? Denn csplit legt die resultierenden Files ins *aktuelle* Verzeichnis.
for fax in `ls /var/spool/hylafax/bin | grep fax[0-9] | sed 's/fax//'` do
cat /var/spool/hylafax/bin/fax${fax} | mimedecode | /var/spool/hylafax/bin/appendheaders.pl > /tmp/mail2fax
subject=`grep .*Subject:.*[Ticket#:.[0-9]] /tmp/mail2fax`
nr=`echo $subject | sed 's/Subject:.*[Ticket#: [0-9]{16}] //'`
cat /tmp/mail2fax | sed '1,/^$/d' | head -n -20 | a2ps -1 -c -q -B --borders=no -o - | sendfax -d ${dialprefix}${nr}
rm /var/spool/hylafax/bin/fax${fax}
done
rm /tmp/mail2fax /var/mail/faxmaster
Das ist nach Schleifen-Ende. Also wenn das File fehlt, gab's keine Schleife. Wie oben erklärt. Natürlich kann das auch dann passieren, wenn das Script funktioniert, denke ich. 'rm -f' wirkt hier Wunder.
Heiko
El Martes, 6. Septiembre 2005 22:52, Heiko Schlittermann escribió:
In welchem Verzeichnis bist Du eigentlich? Wenn Cron Deinen Script startet, ist er in ... ja - was sagen die Experten, ich denke in ~root ...
Vixie cron führt ein chdir("$HOME") durch. Allgemein sollte man sich darauf aber nicht verlassen, zumal $HOME zu den Variablen gehört, die in der Crontab selbst geändert werden können.
Josef
Hallo.
Die Idee mit dem Verzeichnis hatte ich gestern auch schon.
Habe dann noch "cd /var/spool/hylafax/bin" als erstes ins Script geschrieben. Funktionierte trotzdem nicht :-/
Hallo,
(Du machst TOFU)
Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 11:09:11 CEST):
Hallo.
Die Idee mit dem Verzeichnis hatte ich gestern auch schon.
Habe dann noch "cd /var/spool/hylafax/bin" als erstes ins Script geschrieben. Funktionierte trotzdem nicht :-/
Ok, und wenn Du ein
set -x
reinschreibst. Cron schickt Dir 'ne Mail mit der Ausgabe. Oder
#! /bin/bash exec 2>/tmp/log set -x
....
Heiko
Hallo.
HS> Hallo,
HS> (Du machst TOFU)
HS> Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 11:09:11 CEST):
Hallo.
Die Idee mit dem Verzeichnis hatte ich gestern auch schon.
Habe dann noch "cd /var/spool/hylafax/bin" als erstes ins Script geschrieben. Funktionierte trotzdem nicht :-/
HS> Ok, und wenn Du ein
HS> set -x
HS> reinschreibst. Cron schickt Dir 'ne Mail mit der Ausgabe. HS> Oder
HS> #! /bin/bash HS> exec 2>/tmp/log HS> set -x
HS> ....
Dabei kommt folgendes raus...
+ frommail=otrs@magix.net + dialprefix=0 + cd /var/spool/hylafax/bin + '[' -e /var/mail/faxmaster ']'
Bede3utet also, dass csplit nicht ausgeführt wird?
Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 12:40:56 CEST):
Dabei kommt folgendes raus...
- frommail=otrs@magix.net
- dialprefix=0
- cd /var/spool/hylafax/bin
- '[' -e /var/mail/faxmaster ']'
Bede3utet also, dass csplit nicht ausgeführt wird?
Ja. Das bedeutet es. Mach doch mal 'ls /var/mail' - Du müßtest den faxmaster sehen.
Heiko
Hallo.
On 07.09.05 Andre Bauer (monotek@freakmail.de) wrote:
HP> On 07.09.05 Andre Bauer (monotek@freakmail.de) wrote:
Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 11:09:11 CEST):
Hallo,
Die Idee mit dem Verzeichnis hatte ich gestern auch schon.
Habe dann noch "cd /var/spool/hylafax/bin" als erstes ins Script geschrieben. Funktionierte trotzdem nicht :-/
HS> Ok, und wenn Du ein
HS> set -x
Dabei kommt folgendes raus...
- frommail=otrs@magix.net
- dialprefix=0
- cd /var/spool/hylafax/bin
- '[' -e /var/mail/faxmaster ']'
Bede3utet also, dass csplit nicht ausgeführt wird?
HP> Es wird abgeprüft, ob das file (oder directory) /var/mail/faxmaster HP> existiert. Da der Output danach endet muß der Test wohl zu dem HP> Ergebnis gekommen sein, daß das nicht der Fall ist.
HP> H.
Sorry. Das lag daran, das ich vorher keine Mail an den Account gesendet habe, den Fetchmail abruft.
Wenn ich vorher eine Mail sende sieht es wie folgt aus:
Mi Sep 7 14:34:05 CEST 2005 + frommail=ich@bla.de + dialprefix=0 + cd /var/spool/hylafax/bin + '[' -e /var/mail/faxmaster ']' + /usr/bin/csplit -f fax -n 3 -k -s -z /var/mail/faxmaster '/From otrs@magix.net /' '{*}' ++ /bin/ls /var/spool/hylafax/bin ++ /bin/grep 'fax[0-9]' ++ /bin/sed s/fax// + /bin/cat /var/spool/hylafax/bin/fax000 + /usr/bin/mimedecode + /var/spool/hylafax/bin/appendheaders.pl + cp /tmp/mail2fax /tmp/fax ++ /bin/grep '.*Subject:.*[Ticket#:.[0-9]]' /tmp/mail2fax ++ /bin/sed 's/Subject:.*[Ticket#: [0-9]{16}] //' + nr= + /bin/cat /tmp/mail2fax + /bin/sed '1,/^$/d' + /usr/bin/head -n -20 + /usr/bin/a2ps -1 -c -q -B --borders=no -o - + /usr/bin/sendfax -d 0 request id is 51 (group id 51) for host localhost (1 file) + /bin/rm /var/spool/hylafax/bin/fax000 + /bin/rm /tmp/mail2fax /var/mail/faxmaster
Sieht also wieder eher so aus, als ob es nen Problem mit csplit wäre, da ja scheinbar fax000 nicht richtig erstell wird.
Hab das auch nochmal überprüft indem ich die erstellte /tmp/mail2fax nach /tmp/fax kopiert habe. In der Datei war einzig und allein ein großes "F" zu finden? Irgendwas funktioniert beim splitten nicht. Leider scheint csplit überhaupt keine Ausgabe zu machen. Konnte auf Anhieb auch in man keine aktivierbare Loggingfunktion finden.
Die Rquest id 51 ist übrigens nur die Ausgabe von sendfax.
Hallo,
Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 15:52:16 CEST):
- /usr/bin/csplit -f fax -n 3 -k -s -z /var/mail/faxmaster '/From otrs@magix.net /' '{*}'
~~ hier sind zwei Leerzeichen. Aber ich möchte wetten, in den Mails ist dort nur eins.
Kopiere doch auch mal beim Split die /var/mail/faxmaster wohin (oder lösche sie einfach nicht). Und mach dann den Split auf der Kommandozeile.
Heiko
Hallo.
HS> Hallo,
HS> Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 15:52:16 CEST):
- /usr/bin/csplit -f fax -n 3 -k -s -z /var/mail/faxmaster '/From otrs@magix.net /' '{*}'
HS> ~~ HS> hier HS> sind HS> zwei HS> Leerzeichen. HS> Aber HS> ich HS> möchte HS> wetten, HS> in HS> den HS> Mails HS> ist dort nur eins.
HS> Kopiere doch auch mal beim Split die /var/mail/faxmaster wohin (oder HS> lösche sie einfach nicht). Und mach dann den Split auf der HS> Kommandozeile.
HS> Heiko
Die beiden Leerzeichen stimmen schon.
Danke für den Tip mit der Faxmasterkopie. Dort stand tatsächlich auch nur ein großes "F" drin.
Da dieses eigentlich nur vom From Header kommen konnte, lag die Lösung nahe. Die faxmaster mbox ist im Moment, in dem das Script ausgeführt wird, scheinbar noch nicht fertige geschrieben oder noch geöffnet.
Mit einem sleep 5 am Anfang des Scriptes scheint das ganze jetzt zu funktionieren.
Danke!!!
Hallo,
Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 17:22:48 CEST): ..
Die beiden Leerzeichen stimmen schon.
Komisch. Ich würde sagen, in der From_-Zeile stehen keine zwei Leerzeichen hintereinander.
Danke für den Tip mit der Faxmasterkopie. Dort stand tatsächlich auch nur ein großes "F" drin.
Und wenn gerade die nächste Mail ankommt? Du solltest über sowas wie Locking nachdenken.
Heiko
Hallo.
HS> Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 17:22:48 CEST): HS> ..
Die beiden Leerzeichen stimmen schon.
HS> Komisch. Ich würde sagen, in der From_-Zeile stehen keine zwei HS> Leerzeichen hintereinander.
Hatte mich auch gewundert, sind aber wirklich 2.
Danke für den Tip mit der Faxmasterkopie. Dort stand tatsächlich auch nur ein großes "F" drin.
HS> Und wenn gerade die nächste Mail ankommt? HS> Du solltest über sowas wie Locking nachdenken.
Das der Cronjob ja Fetchmail ausführt und Fetchmail danach erst das Script startet, kann eigentlich nichts passieren, da nur aller 10 Minuten die Mails geholt werden. In dieser Zeit sollten eigentlich alle Faxe abgearbeitet sein. Sind nicht so wahnsinnig viele hier. Sleep hab ich aber vorsichtshalber noch auf 60 erhöt, damit wirklich alles erledigt ist, wenn das Script beginnt.
Hab auch manuell mal 2 Mails reingeschickt und dann während der Ausführung noch eine hinterher. Das Fax kam dann zwar erst leicht verspätet in die Sendequeue aber es hat trotzdem funktioniert.
Danke nochmal :-)
On 07.09.05 Andre Bauer (monotek@freakmail.de) wrote:
Andre Bauer monotek@freakmail.de (Mi 07 Sep 2005 11:09:11 CEST):
Hallo,
Die Idee mit dem Verzeichnis hatte ich gestern auch schon.
Habe dann noch "cd /var/spool/hylafax/bin" als erstes ins Script geschrieben. Funktionierte trotzdem nicht :-/
HS> Ok, und wenn Du ein
HS> set -x
Dabei kommt folgendes raus...
- frommail=otrs@magix.net
- dialprefix=0
- cd /var/spool/hylafax/bin
- '[' -e /var/mail/faxmaster ']'
Bede3utet also, dass csplit nicht ausgeführt wird?
Es wird abgeprüft, ob das file (oder directory) /var/mail/faxmaster existiert. Da der Output danach endet muß der Test wohl zu dem Ergebnis gekommen sein, daß das nicht der Fall ist.
H.
Hallo.
Csplit gibt es übrigens nicht nochmal. Wollte nur mit den Pfaden auf Nummer sicher gehen...
lug-dd@mailman.schlittermann.de