Verwenden crontab-job E-mail senden, Die E-Mail-text wendet sich an eine angehängte Datei, die mit Namen ATT00001.bin
Möchte ich zur Analyse einiger Daten in ein linux-server,dann senden Sie es als E-Mail-text an meine E-Mail-Konto , Aber wenn ich die Ausführung dieses shell-Skripts in der shell-Befehl, funktioniert Es auch, Komisch ist, dass wenn ich alle Verfahren in crontab-job, der Die E-Mail-text wird zu einer angehängten Datei, Kann mir da jemand helfen?
#* * * * * sh -x /opt/bin/exec.sh >> /opt/bin/mailerror 2>&1
/* exec.sh */
#/bin/sh
cd /opt/bin
./analysis.sh > test
mail -s "Today's Weather" example@example.com < test
Aber wenn ich ausführen exec.sh in der shell-Befehlszeile direkt, Der E-Mail mit text, Kann jemand erklären es für mich, Rost Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lief in das gleiche problem selber, nur ich bin Rohrleitungen Textausgabe in
mailx
- Heirloom mailx 12.4 7/29/08Beim ausführen des Skripts in der Befehlszeile die E-Mail kam als normale E-Mail mit einem text.
Wenn ich jedoch lief das exakt gleiche Skript über
crontab
den Körper der E-Mail kam als Anhang - ATT00001.BIN (Outlook), application/octet-stream (mutt) oder "noname" (Gmail).Nahm einige der Forschung, um dies herauszufinden, aber hier geht:
Problem
Mailx wird, wenn es auf unbekannte /steuerzeichen im text-input, und wandeln es in eine Anlage mit application/octet-stream mime-Typ festgelegt.
Aus der man-page:
So, müssen Sie entfernen die control-Zeichen, die getan werden kann, d.h. mit
tr
Aber da hatte ich Norwegisch UTF8-Zeichen: æøå - die Liste erweitern, und Sie nicht wirklich wollen, zu halten, wie eine Liste, und ich müssen die Norwegischen Zeichen.
Und Inspektion der Anlage, die ich fand, ich hatte nur \r, \n der "normale" ASCII-Zeichen im Bereich 32-176 - alle druckbaren und 184 und 195 --> UTF8
Sollution
Explizit festlegen des Gebietsschemas in Ihrem Skript:
Laufen
export
in der shell - odersetenv
wenn Siecsh
odertcsh
zu bestimmen, was der locale eingestellt ist.Erklärung
Mailx - bei Ausführung in der shell - mit LANG eingestellt .UTF8, wird korrekt zu identifizieren, die UTF8 chars und weiter.
Beim laufen in
crontab
LANG nicht gesetzt ist, und die standardmäßig auf LANG=C, da durch die Standard-crontab wird ausgeführt, nur über einen eingeschränkten Satz von environment-Variablen (system-abhängig).mailx (oder andere Programme) wird dann nicht erkennen UTF8-Zeichen und feststellen, dass der input beinhaltet unbekannte steuerzeichen.
Mein Problem war UTF8-Zeichen, deins könnte auch andere steuerzeichen in Ihrem Eingang. Führen Sie es durch
hexdump
oderod -c
, aber da funktioniert es OK in einem normalen shell-ich bin zu Ahnen, LANG Fragen.Referenzen:
Ich hatte das gleiche Problem und keine der oben das problem behoben. Verschieben der extra Rückkehr in die Datei behebt das Problem für mich:
Dank diesem forum:
https://forums.opensuse.org/showthread.php/445955-mailx-creates-unwanted-attachment
Stellen Sie sicher, dass Sie dies in Ihrem script
ersetzt werden durch
Kommen, um das problem
Dein script geht davon aus, dass es ausgeführt wird aus einem bestimmten Verzeichnis (beachten Sie, dass fast jeder Pfad ist ein relativer Pfad, der nicht ein absoluter Pfad). cron ausgeführt wird es von einem anderen Verzeichnis.
Den Fix für Texte, die auf E-Mail -
Erklärung
$0 ist der (ggf. relativen) mit dem Namen des shell-scripts ausgeführt wird. Gegeben ein Dateiname, der Ordnername Befehl gibt das Verzeichnis mit den Dateinamen.
So, das line-Verzeichnisse ändert, um zu dem Verzeichnis mit den Skripts oder beendet sich mit einem Fehler-code, wenn entweder der Ordnername oder der cd schlägt fehl.
ODER versuchen, vollständigen Pfad wie
Hinweis: Das gleiche problem diskutiert wird früher hier
FOLLOW-UP:
Versuchen, Sie zu entfernen
sh -x /opt/bin/exec.sh >> /opt/bin/mailerror 2>&1
stattdessen mit
sh /opt/bin/exec.sh 2>&1 >> /opt/bin/mailerror
FOLLOW-UP
Müssen Sie cron neu starten, damit die änderungen wirksam, wenn Sie nicht mit dem Befehl crontab zum Bearbeiten der Datei.