Ich versuche, eine .log- oder .txt-Datei an den Mail-Befehl anzuhängen, um eine E-Mail zu senden, sobald mein KSH-Skript ausgeführt wurde. Ich kann den Mutt-Befehl nicht verwenden, da er nicht auf meinem Computer installiert wurde und ich ihn nicht installieren soll. Ich habe viele Möglichkeiten durch Googeln ausprobiert, aber es hat mir nicht geholfen.
Hier ist meine Anforderung: Ich muss etwa 10 SQL-Abfragen ausführen und das Ergebnis muss per E-Mail-Anhang gesendet werden. Ich habe dies Check.ksh
und führe dies mithilfe nohup
des Befehls aus.
nohup Check.ksh > Valid_Check.log 2>&1 &
In Check.ksh
typeset var TO="[email protected]";
typeset var SUB="Report";
typeset var BODY="Check Completed";
typeset var ATTACHMENT=${FILE_PATH}/Valid_Check.log
if [ -f "${ATTACHMENT}" ]; then
echo "Log file exist";
else
echo "No Log File";
fi
uuencode Valid_Check.log Valid_Check.log | mail -s "${SUB}" "${BODY}" ${TO}
und habe auch das Folgende versucht
#mailx -s "${SUB}" "${TO}" "${BODY}" < ${FILE_PATH}/Valid_Check.log
#cat ${FILE_PATH}/Valid_Check.log | mailx -s "${SUBJECT}" "${TO}" "${BODY}";
Der obige Code erzeugt einen Fehler wie „Gültig... Benutzer unbekannt“
Wären alle Eingaben hilfreich oder gibt es einen anderen einfachen/leichten Ansatz?
Danke,
Antwort1
Wenn Sie ein aktuelles Dokument haben mailx
, verwenden Sie die -a
Option zum Hinzufügen eines Anhangs.
mailx -s "$SUB" -a "Valid_Check.log" "$TO" <<<"$BODY"
Siehe auchhttps://access.redhat.com/solutions/104833
Wenn Sie hoffnungslos in einem früheren Jahrtausend feststecken und über keine Software verfügen, die ordnungsgemäße Anhänge verarbeiten kann, sollten die Uuencode-Daten einfach an den Text angehängt werden.
( echo "$BODY"; echo; uuencode Valid_check.log Valid_check.log ) |
mailx -s "$SUB" "$TO"
Der grundlegende Ansatz leidet jedoch unter einem Race Condition - die Existenz der Ausgabedatei zeigt an, dass der Cron-Jobgestartet,nicht abgeschlossen. Das Einfügen des Mail-Befehls an das Ende des Cron-Jobs würde dieses Problem beheben. Dann wird die E-Mail erst gesendet, wenn der vorherige Schritt abgeschlossen ist.