Ich habe den folgenden Befehl unten als Teil eines Cronjobs. Wenn ich den Befehl über Cron oder in der Befehlszeile ausführe, erhalte ich Null message body; hope that's ok
.
Der Inhalt der E-Mail ist leer, aber wenn ich die /tmp/sdplogs.out
Datei überprüfe, ist Inhalt vorhanden.
Das Skript /dproxy/scripts/cleanSDP2xLogs.sh
sendet die Ausgabe an die Datei /tmp/sdplogs.out
.
Was mache ich falsch? Für jede Hilfe wäre ich sehr dankbar.
$ /dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Null message body; hope that's ok
Antwort1
Sie müssen entweder |
durch ersetzen &&
oder das Skript die Daten auf stdout ausgeben lassen und verwenden |
.
Bei Verwendung wird &&
der mail
Befehl nur ausgeführt, wenn das Skript mit 0 beendet wird.
Wenn Sie das Pipe-Zeichen verwenden, muss Ihr Skript die Daten an stdout senden, damit die Pipe sie weitergeben kann mail
.
In dem, was Sie geschrieben haben, schreibt das Skript Daten in die Datei und mail
liest aus der Dateiparallel zu– und mail
liest am Ende die Datei, bevor das Skript etwas hineingeschrieben hat.
Antwort2
/dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Sie leiten die Ausgabe cleanSDP2xLogs.sh
an den mail
Befehl weiter, was Sie meines Erachtens nicht meinen. Es scheint, dass Sie zuerst cleanSDP2xLogs.sh
/tmp/sdplogs.out generieren und dann /tmp/sdplogs.out in den Mail-Befehl einspeisen möchten.
Wenn dies der Fall ist, ersetzen Sie es einfach |
durch ;
und alles sollte gut gehen:
/dproxy/scripts/cleanSDP2xLogs.sh; mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Antwort3
Eine andere Möglichkeit hierfür ist die Verwendung -a
als Anhang:
/dproxy/scripts/cleanSDP2xLogs.sh
mail -s 'SDP2.X Prod LogArchiving Report' -a /tmp/sdplogs.out [email protected] << ""