[Problem] E-Mail Versand mit Cron

Genesis100

Neuer User
Mitglied seit
6 Mrz 2011
Beiträge
77
Punkte für Reaktionen
1
Punkte
8
Hallo,

ich habe kleines Problem mit Freetz 7.21 für Fritzbox 7490.

Die Cron Funktion kann nicht E_Mail senden, die in einem Script sich befindet.

Die Script Datei wird normal ausgeführt.

Wenn ich die Script Datei auf cmd Ebene (Telnet) ausführe, dann der Versand des E-Mail funktioniert normal.

Hier ist die Datei:

Code:
#!/bin/sh

PATH=/bin:/usr/bin:/sbin

MAILRCPT=[EMAIL][email protected][/EMAIL]

SMTP="smtp.googlemail.com"

NAME="xxxx"

PASS="yyyyyyyy"



echo test > /var/tmp/test.txt



mail send -s "Fritzbox 7490 ist neu gestartet" -t ${MAILRCPT} -m ${SMTP} [-a ${NAME} [-w ${PASS}]]



sleep 5

/sbin/reboot[CODE]


Die test.txt wir normal eingelegt aber kein E-Mail versendet.



Gruß
 
Wie kommst Du auf die Idee, es gäbe auf der FRITZ!Box ein "mail"-Kommando? Wenn das im Rahmen von Freetz hinzugefügt wurde (wäre mir auch neu, ist aber nicht auszuschließen), sollte man wenigstens noch die verwendete Freetz-NG-Konfiguration anhängen.

Ansonsten gibt es auf der Box ein Binary von AVM für den Mail-Versand ... das nennt sich dann "mailer" und wie man es aufrufen kann, verrät es einem, wenn man es mit "-?" (nicht das übliche "-h") als Option konfrontiert.

(PS: I've checked the translation to English for this text with DeepL - the sense/meaning is still clear after translation. I've got the impression, that German isn't really your native language.)

EDIT:
Wenn ich die Script Datei auf cmd Ebene (Telnet) ausführe
Das würde zwar darauf hindeuten, daß da tatsächlich irgendein Kommando "mail" in der Firmware ist - nur wäre immer noch unklar, woher das wohl käme.
 
Ich hatte beide Befehle ausprobiert mail und mailer. Mit Telnet beide funktionieren.
Hier ist die verwendete Freetz-NG-Konfiguration
 

Anhänge

  • .config.txt
    90.2 KB · Aufrufe: 5
  • .packages.txt
    487 Bytes · Aufrufe: 6
Sorry, mein Fehler (die Aufteilung der Forks ist noch zu neu) ... ich habe erstens nicht genau hingesehen bzw. überlegt, daß es sich um NG handelt (ja, handeln muß, denn auch die 07.21 spricht dafür und ich schreibe sogar noch selbst von "Freetz-NG-Konfiguration") und zweitens ist das eine sehr alte Version von Freetz-NG (der Konfigurationsdatei nach eine aus dem Okt. 2020) und drittens kann ich die Konfiguration gar nicht genau nachbauen (selbst wenn ich es wollte), weil ich im Freetz-NG-Repo u.a. das Paket "oscam-1.5.1" nicht finde (und mich dann wundere, wo Du das her hast bzw. warum Du dann nicht dort nachfragst, wo auch dieses Paket zu finden ist).

Aber selbst wenn ich in die gezeigte ".config" schaue, finde ich da kein einziges Symbol, was "mail" (mit "ignore case") in seinem Namen hätte und gesetzt wäre und nicht einmal das "sendmail"-Applet ist bei den Einstellungen der BusyBox ausgewählt. Ich komme daher aus dem Staunen gar nicht mehr heraus, wo da auf der FRITZ!Box ein "mail"-Kommando herkommen sollte - aber ich verfolge auch lange nicht alle Änderungen in Freetz-NG.

Ich bin also raus und entschuldige mich für meine Nachfragen - interessieren würde mich trotzdem noch, was ein
Code:
find /bin /sbin /usr -name "*mail*" -exec ls -l '{}' \;
auf der Box ergibt. Ich wüßte jedenfalls gar nicht, wo ich (in Freetz-NG) so ein Kommando suchen sollte (höchstens noch, daß es ggf. ein Symlink auf ein anderes Kommando ist - dann solltest Du das mit dem o.a. Kommando auf "aufklären" können) - und selbst die Pakete, wo man ggf. noch eines erwarten könnte (checkmaild, emailrelay, xmail), sind bei Dir (nach der ".config" und nach der Paketliste) gar nicht im Image.

Das erscheint mir dann doch einigermaßen seltsam - ich finde jedenfalls in den gezeigten Dateien keinen Hinweis darauf, daß es tatsächlich ein "mail"-Kommando geben würde/müßte und das Nachstellen derselben Konfiguration (falls irgendein nicht berücksichtigtes Paket doch noch ein "mail" enthalten sollte) scheitert schon an den erwähnten Paketen, die es im Freetz-NG-Repo gar nicht gibt.

Es hat sich also an meiner Verwunderung/Frage aus #2 (wo das "mail" herkommen sollte) nichts geändert ... ich bin mal gespannt, wie das hier weiter geht (aber nur noch als Zuschauer - außerdem hatte ich mir ja vorgenommen, zu Freetz-Fragen hier nicht mehr zu antworten, das muß ich irgendwann auch mal trainieren).

EDIT: Ich habe sogar noch einmal in die "bash" geschaut (obwohl die lt. Paketliste ja auch nicht enthalten ist), ob es darin ggf. ein minimales "mail" geben könnte, was für die interaktive Anzeige ("You have mail.") genutzt werden könnte und vielleicht etwas mehr kann, nämlich auch Senden. Nur finde ich da auch nichts, was das irgendwie erklären könnte - ich bin schon sehr gespannt, wie sich das am Ende aufklärt.

EDIT2: Und wenn man sich das "Skript" in #1 ganz genau ansieht, stößt man auf diese Zeile:
Code:
mail send -s "Fritzbox 7490 ist neu gestartet" -t ${MAILRCPT} -m ${SMTP} [-a ${NAME} [-w ${PASS}]]
... ich kann mir nur schwer vorstellen, daß die tatsächlich funktioniert (das geht bei den eckigen Klammern los) und nicht nur irgendwo (falsch) abgeschrieben wurde. Denn dieses Format würde man ja genau wieder für die Darstellung möglicher Parameter/Optionen verwenden, wenn die Angabe von "-a $NAME" optional ist und das "-w $PASS" nur dann angegeben werden darf, wenn auch "-a" vorhanden ist.

Ich will Dir nicht zu nahe treten ... aber vielleicht schreibst Du ja doch noch einmal etwas zu Deinen Shell-Kenntnissen und wieso Du zu der Ansicht gekommen bist, daß "mit Telnet beide funktionieren". Ich werde das unangenehme Gefühl nicht los, hier einem Phantom(-Fehler) hinterher gerannt zu sein, der sich am Ende nur als falsche Benutzung herausstellt. Ein "Protokoll", das seinerseits zeigt, wie das "mit Telnet" jeweils funktioniert, wäre da sicherlich hilfreich - auch wenn es die Frage, wo das "mail" dann herkäme, nicht ein Stück näher erklärt.
 
Zuletzt bearbeitet:
...außerdem hatte ich mir ja vorgenommen, zu Freetz-Fragen hier nicht mehr zu antworten, das muß ich irgendwann auch mal trainieren...
Das wäre aber schade,... dem Forum und mir würde dann etwas fehlen.


Und zum Problem: Die dargestellte Situation ist - auch für mich - nur schleierhaft (wenn nicht sogar mysteriös).
 
root@fritz:/var/mod/root# find /bin /sbin /usr -name "*mail*" -exec ls -l '{}' \
;
-rwxrwxrwx 1 root root 28172 Sep 4 14:53 /sbin/maild
-rwxrwxrwx 1 root root 45320 Sep 4 14:53 /sbin/mailer
-rwxrwxrwx 1 root root 43400 Sep 4 14:53 /usr/bin/ahamailer
-rwxr-xr-x 1 root root 4156 Oct 3 10:53 /usr/bin/mail
-rw-r--r-- 1 root root 844 Oct 26 09:52 /usr/lib/callmonitor/actions.d/mail.sh
-rwxrwxrwx 1 root root 2454 Oct 26 09:52 /usr/lib/cgi-bin/oscam/do_testmail.cgi
-rwxrwxrwx 1 root root 5560 Sep 4 14:53 /usr/lua/email_data.lua
-rwxrwxrwx 1 root root 8350 Sep 4 14:53 /usr/www/all/assis/pushmail_account.lua
-rwxrwxrwx 1 root root 1113 Sep 4 14:53 /usr/www/all/css/rd/icons/ic_mail_gray.svg
-rwxrwxrwx 1 root root 23267 Sep 4 14:53 /usr/www/all/dect/mail_edit.lua
-rwxrwxrwx 1 root root 4579 Sep 4 14:53 /usr/www/all/dect/show_mail.lua
-rwxrwxrwx 1 root root 6787 Sep 4 14:53 /usr/www/all/js/email.js
-rwxrwxrwx 1 root root 638 Sep 4 14:53 /usr/www/all/myfritz_email_verified.lua
-rwxrwxrwx 1 root root 1113 Sep 4 14:53 /usr/www/all/resources/icons/ic_mail_gray.svg
-rwxrwxrwx 1 root root 1662 Sep 4 14:53 /usr/www/all/sso_email.js
-rwxrwxrwx 1 root root 1908 Sep 4 14:53 /usr/www/all/sso_email.lua

Wenn ich die Script mit der Zeile: mail send -s "Fritzbox 7490 ist neu gestartet" -t ${MAILRCPT} -m ${SMTP} [-a ${NAME} [-w ${PASS}]] mit Telnet ausführe bekomme ich E-Mail mit dem Subject Fritzbox 7490 ist neu gestartet

[Edit Novize: Beiträge zusammen gefasst - siehe Forumsregeln]

syslogd Ausgabe:

Jan 27 12:45:00 fritz cron.err crond[19065]: USER root pid 14810 cmd /var/media/ftp/uStor01/cmd/test1.sh
 
Zuletzt bearbeitet von einem Moderator:
Ja, das könnte tatsächlich der fehlende Mosaik-Stein sein ... wobei es noch interessant wäre, was da in der "/usr/bin/mail" tatsächlich steht (4156 Byte sind irgendwie viel für ein Shell-Skript und irgendwie wenig für eine Binärdatei) - das "mail.sh" aus dem "actions"-Verzeichnis des Call-Monitors dürfte es ja nicht sein (auch nicht als Hardlink), da die Größe ja eine andere ist.

Ich schaue mal in das Paket des Call-Monitors (den hatte ich tatsächlich noch nie auf einer eigenen Box), vielleicht finde ich da ja tatsächlich die Ursache (oder gar die Quelle) für das "mail".

Danke fürs Suchen in einem NG-Image ...

EDIT: Wobei der Aufruf von "mail send" mit den eckigen Klammern in der Zeile immer noch Kohl ist und höchstens deshalb funktioniert, weil das hier existierende/benutzte Kommando "mail" sich wohl einen Sch*** darum kümmert, ob der Aufruf syntaktisch richtig ist oder nicht - Genaueres läßt sich ja erst sagen, wenn man das verwendete Kommando gefunden hat.
 
Zuletzt bearbeitet:
#!/bin/sh
set -x

echo Karte ist OK > /var/tmp/test.txt

mail send -s "Seca_Nagra Karte ist OK" -t [email protected] -m smtp.gmail.com

So eine Script per Telnet funkioniert.
Über Freetz Cron test.txt wird erzeugt aber kein E-Mail Versand
fritz cron.err crond[19065]: USER root pid 14810 cmd /var/media/ftp/uStor01/cmd/test1.sh
 
Das beruhigt mich schon beim ersten Blick wieder ... hinter dem "/usr/bin/mail" verbirgt sich dann nur ein zusätzliches Shell-Skript (https://github.com/er13/callmonitor/blob/master/base/usr/bin/mail), das seinerseits genau mit dem "mailer" von AVM arbeitet - einen kompletten SMTP-Client in weniger als 4800 Byte hätte ich mir auch nur schwer vorstellen können - das "mailer" von AVM ist fast 10x so groß und die BusyBox hat eben auch kein "mail"-Applet, höchstens (wenn man es einbaut) ein "sendmail".

Im Shell-Skript sieht man dann auch, warum das mit den eckigen Klammern trotzdem klappt klappen könnte (denn hier muß ich mich auf die Aussage verlassen, daß das auch mit den eckigen Klammern funktioniert), obwohl es eigentlich ein Syntaxfehler bleibt ... da wird zuerst mal die Push-Service-Konfiguration von AVM ausgelesen (Funktion "config") und später werden die Optionen auf der Kommandozeile ausgewertet. Da "[-a" und "[-w" aber keine Optionen sind, werden praktisch alle Angaben ab der ersten eckigen Klammer als normale (positional) Parameter vom Skript angesehen und diese werden (nachdem sie mit "getopt" zerlegt und sortiert wurden) schlicht ignoriert: https://github.com/er13/callmonitor/blob/master/base/usr/bin/mail#L192 beim ersten Auftreten von "--" (außer das allererste "send") und nicht an "prepare_mail" übergeben. Da aber doch schon ein gültiger Benutzer und ein Kennwort für den SMTP-Versand aus der AVM-Konfiguration ausgelesen wurden, klappt der Aufruf (von "mailer") dann trotzdem.

=================================================================

Wenn man hier irgendwie sehen will, was am Skript falsch ist, das von "crond" abgearbeitet werden soll, dann braucht es schon ein vernünftiges Format für den Beitrag. In #1 stimmt ja offensichtlich der CODE-Block nicht - da ist ein falsches schließendes Tag zu sehen. Und in #9 kann ich beim besten Willen nicht erkennen, von wo bis wo da das Skript geht.

Das mit dem "echo" oben ist auch ein wenig schmal als "Debug-Ausgabe" oder als "Erfolgsanzeiger" (zumindest, wenn man die Datei nicht vorher erst mal gelöscht hat, ist deren Existenz spätestens beim zweiten Durchlauf auch kein sicheres Anzeichen mehr - da wäre irgendein Datum bzw. eine Uhrzeit in der Datei dann schon schlauer) ... und wenn man nach dem (oder vor dem) "set -x" noch ein "exec 2>/var/media/ftp/test.log" macht, sieht man die einzelnen Zeilen, die da ausgeführt werden, auch in der Datei, wohin man die Ausgabe umgeleitet hat. Normalerweise würde ich direkt auf fehlende "exec"-Rechte tippen (wg. des Mountens des Sticks mit "noexec"), aber dann ließe sich das auch nicht von Hand ausführen.
 
exec 2>/var/media/ftp/test.log
Die log Datei, die enstanden ist nach cron

+ echo Karte ist OK
+ mail send -s 'Seca_Nagra Karte ist OK' -t [email protected] -m smtp.gmail.com
Segmentation fault

Mail nicht gesendet

Nach Telnet
+ echo Karte ist OK
+ mail send -s 'Seca_Nagra Karte ist OK' -t [email protected] -m smtp.gmail.com

Mail gesendet
 
"Segmentation fault" ist meist das Ergebnis falscher/unpassender Bibliotheken beim Aufruf eines Programms - vermutlich hat der Prozess, wenn er über "crond" gestartet wird, nicht die richtigen Umgebungsvariablen (z.B. käme da "LD_LIBRARY_PATH" in Betracht) zum Zeitpunkt seiner Ausführung.

Das kann man sich auch alles (mit entsprechenden "set"-Kommandos) in die Datei protokollieren lassen - eine "interaktive Shell" (wie bei "telnet") ist eben etwas anderes als eine, die per se nur als "batch process" (d.h. ohne Terminal) gestartet wird.
 
Ich glaube, dass ich nicht mehr viel machen kann.
Vielen Dank für die ausführlichen Antworten und für die Mühe

Grüsse

Bleiben Sie Gesund
 
mit Telnet ./test.sh
mot Cron 59 14 * * * /var/media/ftp/uStor01/cmd/test1.sh > /var/media/ftp/test1.log 2>&1

root@fritz:/var/mod/root# mount
rootfs on / type rootfs (rw)
/dev/root on /wrapper type yaffs (ro,relatime)
devtmpfs on /wrapper/dev type devtmpfs (rw,relatime,size=120944k,nr_inodes=30236,mode=755)
/dev/loop0 on / type squashfs (ro,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=120944k,nr_inodes=30236,mode=755)
proc on /proc type proc (rw,relatime)
tmpfs on /var type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
securityfs on /sys/kernel/security type securityfs (rw,relatime)
none on /sys/kernel/debug type debugfs (rw,relatime)
/dev/mtdblock4 on /var/flash type yaffs2 (rw,sync,relatime)
/dev/mtdblock5 on /var/media/ftp type yaffs2 (rw,sync,relatime)
 
Ja, supergenau :cool:
Probier mal:
Rich (BBCode):
59 14 * * * sh /var/media/ftp/uStor01/cmd/test1.sh > /var/media/ftp/test1.log
( Die Umleitung von stdin/stderr braucht es am Ende eher nicht )

mount
Von noexec nichts zu sehen, daran liegts also nicht.
Aber von uStor01 ist auch nichts zu sehen.
Wohin ist es gegangen?
Kein USB-Speicher vorhanden?
 
Zuletzt bearbeitet:
Ich glaube, dass ich nicht mehr viel machen kann.
:oops:
Wie sieht denn dein cron -Eintrag in freetz-ng-Webinterface aus?
Mir kam nämlich eine fixe Idee in den Sinn: Macht ein zusätzliches "sh" Sinn???
Rich (BBCode):
30 4 * * * sh /pfad/script.sh
 
Es hat nichts gebracht.
Die Datei wird es ausgeführt nur Email wird nicht verschikt.

+ echo Karte ist OK
+ mail send -s 'Seca_Nagra Karte ist OK' -t [email protected] -m smtp.gmail.com
Segmentation fault
 
Kann es sein, dass der USB-Speicher mit noexec gemountet wurde und deswegen der Start des Skripts verhindert wird?
Und das liefert dann (obwohl es beim Aufruf in einer interaktiven Session klappt) beim Aufruf über den "crond" den gezeigten "Segmentation fault"? Das würde mich zumindest sehr verwundern. Das dürfte (siehe weiter oben) hier kein Rechteproblem sein,.

@Genesis100:
Pack mal in das Skript noch ein "env 1>&2" als Kommando mit hinein und vergleiche den Inhalt des Environments in den beiden Fällen (telnet bzw. crond).
 
Und wo/was ist uStor01 und warum taucht das unter mount nicht auf?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.