So ändern Sie einen Cronjob-E-Mail-Betreff

49

Ich führe ein halbes Dutzend verschiedene Cron-Jobs von meinem Hosting bei Hostmonster.com aus. Wenn ein Cronjob ausgeführt wurde, erhalte ich eine E-Mail mit der Ausgabe des Skripts.

Die E-Mail hat das Format:

Von: Cron Daemon
Betreff: Cron / ramdisk / bin / php5 -c /home5/username/scheduled/optimize_mysql.bash

Das Problem dabei ist, dass der Betreff der E-Mail es sehr schwer macht zu lesen, zu welchem ​​Cronjob die E-Mail gehört.

Gibt es eine Möglichkeit, den Betreff einer Cronjob-E-Mail so zu ändern, dass er leichter zu lesen ist?

Zum Beispiel:

Von: Cron Daemon
Betreff: MySQL-Datenbank optimieren
justinl
quelle

Antworten:

11

Auf meinen Systemen (die meisten von Debian) wird die gesamte Ausgabe eines Skripts / Programms, das als Crontab-Eintrag bezeichnet wird, per E-Mail an den account@localhostInitiator des Crons gesendet . Diese E-Mails haben einen Betreff wie Ihren.

Wenn Sie eine E-Mail erhalten möchten, schreiben Sie ein Skript, das keine eigene Ausgabe hat. Legen Sie stattdessen alle Ausgaben in eine Textdatei.

Und mit

mail -s 'your subject' adress@where < textfile

Sie erhalten es so, wie Sie es möchten.

Michèle
quelle
Danke Michèle. Ich hatte gehofft, das automatische E-Mail-System von Hostmonster zu verwenden, aber es sieht so aus, als würde dies die Lösung sein, mit der ich arbeite. Anstatt von meinem Hosting kontrollierte automatische Cron-E-Mails zu erhalten, sende ich einfach meine eigenen E-Mails.
Nur
53

Oder benutze den Befehl sh noop (:)

0 9-17 * * 1-5    : Queue Summary; PATH=/usr/sbin qshape

Das Thema sieht immer noch kludgey aus, aber es ist zumindest beschreibend und erfordert keine überflüssigen Skripte.


quelle
4
Nun, das ist ein Hack! (Ich mag es.)
Maxy-B
8
Beachten Sie, dass das Leerzeichen nach dem Doppelpunkt wichtig ist.
Patrick Forget
1
Wird der Titel "Queue Summary" sein? Und ist der Befehl "qshape" in diesem Fall?
Pratik Khadloya
Es sieht so aus, als wäre qshape ein Postfix-Befehl. Mein Unix-Rechner verwendet den Befehl "mail". Aber ist der Befehl qshape hier relevant?
Pratik Khadloya
1
Zu Ihrer Information, der Betreff der E-Mail istQueue Summary; PATH=/usr/sbin qshape
Akom
20

Leiten Sie Ihre Cron-Job-Ausgabe direkt an Mail weiter, und geben Sie dann den Betreff ein. Die 2>&1Syntax sendet alle Fehlerausgaben, die sonst verschwinden würden.

mycmd 2>&1 | mail -s "mycmd output" myname
Mark Harrison
quelle
2
Ich mache das, aber intern in den Skript-Cron-Aufrufen, weil ich möchte, dass der Betreff den Erfolg oder Misserfolg des ausgeführten Skripts widerspiegelt.
Tom Barron
13

Übernehmen Sie die Verantwortung von crond für das Senden der Befehlsausgabe (oder nicht, wenn es keine gibt), indem Sie die Ausgabe und stderr in 'mailx -E' leiten. Zum Beispiel:

0 * * * * your-command 2>&1 | mailx -E -s "Descriptive Subject" $LOGNAME

Die '-E'-Option von Mailx ist nett, weil es wie crond selbst keine Mail sendet, wenn es keine zu sendende Ausgabe gibt.

Alexis Huxley
quelle
1
Was ist die Variable $ LOGNAME hier?
Pratik Khadloya
Gibt es eine Möglichkeit, eine E-Mail nur zu senden, wenn der Beendigungscode des Befehls ungleich Null ist?
Pratik Khadloya
1
@PratikKhadloya, von Crontab (5): Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. PATH is set to "/usr/bin:/bin". HOME, SHELL, and PATH may be overridden by settings in the crontab; LOGNAME is the user that the job is running from, and may not be changed.
Lingfish
2
Es gibt mehrere mailxImplementierungen. Nur einige von ihnen bieten diese -EOption an. Auf Ubuntu möchten Sie die Pakete bsd-mailxoder heirloom-mailx; Das mailutilsPaket enthält einen Gnu- mailxBefehl mit einem anderen -E.
Smylers
2

Eine andere Lösung besteht darin, ein Shell-Skript mit der gewünschten Betreffzeile zu schreiben, das den richtigen Befehl aufruft. In Ihrem Beispiel wäre dies:

#Optimize_MySQL_Database.sh

/ramdisk/bin/php5 -c /home5/username/scheduled/optimize_mysql.bash

Sie können Ihr bin-Verzeichnis in den Pfad aufnehmen, indem Sie es in der crontab-Datei festlegen.

EEAA
quelle
0

VERSUCHE DIESES - Implementiere in der Kommandozeile den folgenden Code ---

/usr/local/bin/php -q /path /hostname/foldername/Page-You-want-to-execute \
   | **mail -s "*SUBJECT*" [email protected].**
  • Dies ist nur ein Hinweis, um Sie zu führen
sudhu
quelle