PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : script mit mail-funktion funktioniert nicht in crontab



robsen21
17-11-2006, 14:47
Servus,
ich habe ein Mini-Script geschrieben, was eine bekannte Datei ausliest und wenn es den string "error " findet, dann via mail eine Nachicht versendet.

#!/bin/sh
grep "error " /home/blabla/backup-log
if [ $? = 0 ]; then
mail -s "Systeminfo zu error beim backup aufs Band" info@blabla.de </root/mailtext.txt
else
rm /home/blabla/backup-log

fi

Wenn ich das Script von Hand ausführe, klappt alles wunderbar und die mail geht an den Clienten.
Wenn ich allerdings das Script in der crontab einmal täglich aufrufen will, sendet er den mailtext an /root/dead.letter und sonst nirgendwo hin. Woran liegt das und was muss ich ändern?
Der crontab-Eintrag sieht so aus:

0 11 * * * /root/scripts/blabla.sh >/root/band-log

Wer kann mir helfen? Ich dachte, die crontab fürht die scripts einfach nur aus und nichts weiter.

Vielen Dank im Voraus.

peschmae
17-11-2006, 16:04
Wenn ein Programm von Cron ausgeführt wird sind die Umgebungsvariablen *nicht* gesetzt. d.h auch PATH nicht - er findet also das Programm gar nicht, nehme ich mal an.

MfG Peschmä

robsen21
17-11-2006, 18:32
Vielen Dank erstmal für die schnelle Antwort.
Ich habe in der gleichen crontab ein zweites sprict für das entsprechende
backup laufen. Dieses liegt ebenfalls in /root/scrpits/ und wird ohne fehler ausgeführt.
Den Pfad sollte er also finden. Wenn Du das meintest.

Kann es sein, dass die Variable MAILTO=root vielleicht mit dem Kommando mail kollidiert?
Wie gesagt, wenn ich das script in der Konsole aufrufe, klappt alles, wie ich es mir vorstelle und wenn ich die enzelnen Befehle (also mail) direkt eintippe klappt es auch.

Wer noch eine Idee hat... dem danke ich jetzt schon.

Grüsse

rthill
18-11-2006, 11:32
mail -s "Systeminfo zu error beim backup aufs Band" info@blabla.de </root/mailtext.txt


geh doch mal hin und gib den ganzen pfad zu mail an:


# type mail
mail is /bin/mail
#

robsen21
18-11-2006, 18:56
Danke für die Antwort.
Ich kann es leider im Moment nicht probieren, da ich zuhause bin. Am Montag wieder...
Aber in der crontab ist der PATH /bin angegeben. Wir werden sehen.


Grüsse

robsen21
20-11-2006, 18:31
Servus,

ich hab das mal probiert, den pfad findet er.
allerdings fehlen, wenn ich das richtig verstehe, denn ich hab keine wirckliche ahnung, die umgebungsvariablen, die der user root in der konsole hat, oder?
wie kann ich die setzen?
das programm mail kennt dann offensichtlich einige nötige angaben nicht.

bin für jeden tipp dankbar.

grüsse

zst
20-11-2006, 20:24
Hallo robsen21,

ich nutze mail auch per cron, problemlos.
Meit Tippppp wäre, dem mail den Empfänger mitzugeben !
mail anwen@hierundda.de -s "Betreff" .......

Wenn Deine Text-Datei "/root/mailtext.txt" nicht die richtigen Rechte hat, könnte es auch haken ...

Gruss zst

robsen21
20-11-2006, 21:01
danke für den hinweis.
spielt die reihenfolge der anweisungen eine rolle?
die adresse steht hinter dem subject und, wie gesagt, von hand in der konsole gestartet funktioniert das script ja und die mail kommt an, wie vorgesehen.
ich versuchs mal.

grüsse

Romanday
21-11-2006, 00:06
danke für den hinweis.
spielt die reihenfolge der anweisungen eine rolle?
grüsse

Na klar.

man mail

Besser ist so etwas mit PHP, Perl, Python etc. zu lösen.
Da hast du noch mehr Möglichkeiten, und keine Probleme
mit eventuellen Sonderzeichen.
Wenn das natürlich nur 1-2 Zeilen sind ist, mail die bessere Wahl.

robsen21
21-11-2006, 10:20
servus,

das ab ich probiert, hat nicht geholfen.
mit php und anderen varianten kann ich leider nicht arbeiten, bin kein programmierern, nur in anderen foren konnte mir keiner helfen.
nochmal: wenn ich das script, nicht den befehlt mail, in der konsole aufrufen, also ./backup.sh im ordner, funktioniert alles bestens. nur in der crontab nicht. das script selber ist, denke ich, also nicht das problem, oder?
welche infos braucht cron noch?

immer noch ratlos...

grüsse

Romanday
21-11-2006, 11:22
in der konsole aufrufen, also ./backup.sh im ordner, funktioniert alles bestens. nur in der crontab nicht. das script selber ist, denke ich, also nicht das problem, oder?
welche infos braucht cron noch?

immer noch ratlos...

grüsse

lege mal eine error.txt an.
touch error.txt

und führe die Zeile mal per cron aus.

mail -s "Systeminfo" info@blabla.de </root/mailtext.txt >> /root/error.txt 2>&1

Danach schreib mal, was in der error.txt drin steht.

Außerdem hast Du den wahrscheinlich den falschen Cron Befehl ausgeführt.

Das heißt: Mach um 11 Uhr jeden Tages ChaCha.
0 11 * * *

Zum Testen, ziemlich lange Wartezeit.:D

Wenn dein Script irgendwann funktioniert versende solche Emails etc.
nicht als root, sondern lege dir dafür mal eine eigenen User mit
gesonderten Rechten an.

robsen21
21-11-2006, 20:41
servus,

jetzt funktionierts und ich hab keine ahnung warum. aber dennoch vielen dank für die hilfe.
die error.txt war leer und die mail, da wo sie hin sollte. ja, weiss der geyer.


robsen21

Romanday
22-11-2006, 12:06
servus,

jetzt funktionierts und ich hab keine ahnung warum. aber dennoch vielen dank für die hilfe.
die error.txt war leer und die mail, da wo sie hin sollte. ja, weiss der geyer.


robsen21

War doch gar nicht so schlimm.
In der error.txt steht nur etwas, wenn ein Fehler aufgetreten wäre.
Deswegen auch der Name z. B. error.txt.
Mit der Fehlermeldung, hätte man die Ursache näher eingrenzen können.
(Meist sitzt der Fehler vor dem Rechner.:D)

robsen21
22-11-2006, 14:00
"(Meist sitzt der Fehler vor dem Rechner.)"
Stimmt leider.

Grüsse

robsen21
23-11-2006, 12:39
so, und da isser wieder, der fehlerteufel. es geht wieder nicht.
diesmal hab ich aber eine kontrete fehlermeldung.

"Invalid or incomplete multibyte or wide character"

steht in der error.txt und ein
dead.letter mit dem email-text ist im verzeichnis root gelandet.

ausser einem spanischen forum hab ich nichts bei google gefunden.
wer kann mir helfen? was heisst das? und was muss ich ändern.

das script sieht immer noch so aus:
#!/bin/sh

grep "error " /root/band-backup-log
if [ $? = 0 ]; then
mail info@blabla.de -s "Systeminfo zu error beim backup aufs Band" </root/mailtext.txt > /root/error.txt 2>&1
cp /root/band-backup-log /home/bandsicherung/band-backup-log
else
rm /root/band-backup-log

fi

und der crontab-eintrag so:

#error info per mail an info@blabla.de
30 13 * * 1-6 root /root/scripts/backup-error-script.sh >/root/backup-error-log

der fehler tritt NUR auf, wenn ich es über die crontab laufen lasse. von hand in der konsole aufgerufen, geht alles bestens.

Hilfe, bitte, bitte....

robsen21

robsen21
24-11-2006, 09:20
hat denn niemand eine idee?

nun hab ich ihm noch die umgebungsvariable home=/root übergeben und es kommt immernoch der fehler:

"Invalid or incomplete multibyte or wide character
. . . message not sent."


grüsse

Romanday
24-11-2006, 10:06
hat denn niemand eine idee?

nun hab ich ihm noch die umgebungsvariable home=/root übergeben und es kommt immernoch der fehler:

"Invalid or incomplete multibyte or wide character
. . . message not sent."


grüsse

Vermutung:
Du übergibts Zeichen an das Programm mail mit denen es nicht klar kommt.
Mach es noch 1x zum Testen mit z.B. nur 1nem Wort als Subjekt und
1 Wort als Body der eMail.

robsen21
24-11-2006, 10:28
danke, das war der fehler.
ich hab im mailtext einen umlaut verwendet (bei grüsse lol) den cron beim aufrufen des scripts (im unterschied zur konsole) mit dem falschen zeichensatz ausliest und irgendwas $* bla bla draus macht. und dann glaubt cron wohl, vermute ich, das müsste binärcode sein. bum, da hammers.

vielen dank noch mal.

gÜÜßße

robsen21