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

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.


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.


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

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.


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.


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*" YOUR@MAIL.COM.**
  • Dies ist nur ein Hinweis, um Sie zu führen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.