Jak zmodyfikować temat wiadomości e-mail Cronjob

49

Prowadzę pół tuzina różnych zadań crona z mojego hostingu na Hostmonster.com. Po wykonaniu zadania cronjob otrzymuję wiadomość e-mail z danymi wyjściowymi skryptu.

Wiadomość e-mail ma format:

Od: Cron Daemon
Temat: Cron / ramdisk / bin / php5 -c /home5/username/scheduled/optimize_mysql.bash

Problem polega na tym, że temat wiadomości e-mail sprawia, że ​​bardzo trudno jest odczytać, do kogo odnosi się wiadomość e-mail.

Czy istnieje sposób na zmodyfikowanie tematu wiadomości e-mail o cronjob, aby ułatwić czytanie?

Na przykład:

Od: Cron Daemon
Temat: Zoptymalizuj bazę danych MySQL
justinl
źródło

Odpowiedzi:

11

W moich systemach (większość Debiana) wszystkie dane wyjściowe ze skryptu / programu wywoływanego jako pozycja crontab są wysyłane pocztą elektroniczną do osoby, account@localhostktóra zainicjowała cron. Te wiadomości e-mail mają podobny temat.

Jeśli chcesz otrzymać wiadomość e-mail, napisz skrypt, który sam nie ma danych wyjściowych. Zamiast tego umieść wszystkie dane wyjściowe w pliku tekstowym.

I z

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

otrzymujesz to tak, jak chcesz.

Michèle
źródło
Dzięki Michèle. Miałem nadzieję, że skorzystam z automatycznego systemu poczty e-mail firmy Hostmonster, ale wygląda na to, że będzie to rozwiązanie, z którym korzystam. Zamiast odbierać e-maile Automatic Cron kontrolowane przez mój hosting, po prostu wysyłam własne e-maile.
justinl
53

Lub użyj polecenia sh noop (:)

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

Temat wciąż wygląda kludgey, ale przynajmniej jest opisowy i nie wymaga żadnych dodatkowych skryptów.


źródło
4
To jest hack! (Podoba mi się.)
Maxy-B
8
Zauważ, że spacja jest ważna po dwukropku.
Patrick Forget
1
Czy tytuł będzie brzmiał „Podsumowanie kolejki”? I czy w tym przypadku polecenie „qshape”?
Pratik Khadloya
Wygląda na to, że qshape jest poleceniem postfiksowym. Mój komputer z systemem UNIX używa polecenia „mail”. Ale czy polecenie qshape jest tutaj istotne?
Pratik Khadloya
1
Do wiadomości, temat wiadomości e-mail będzieQueue Summary; PATH=/usr/sbin qshape
Akom
20

Prześlij dane wyjściowe zadania cron bezpośrednio do poczty, a następnie możesz wypełnić wiersz tematu. 2>&1składnia wysyła żadnego wyjścia błędów, które znikają inaczej.

mycmd 2>&1 | mail -s "mycmd output" myname
Mark Harrison
źródło
2
Robię to, ale wewnętrznie w wywołaniach skryptu cron, ponieważ chcę, aby temat odzwierciedlał powodzenie lub niepowodzenie uruchamiania skryptu.
Tom Barron,
13

Przejmij odpowiedzialność cronda za wysyłanie danych wyjściowych poleceń (lub nie, jeśli ich nie ma), przesyłając dane wyjściowe i stderr do 'mailx -E'. Na przykład:

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

Opcja „-E” Mailxa jest dobra, ponieważ, podobnie jak sama crond, nie wysyła wiadomości, jeśli nie ma żadnych danych wyjściowych do wysłania.

Alexis Huxley
źródło
1
Co to jest tutaj zmienna $ LOGNAME?
Pratik Khadloya
Czy istnieje sposób wysłania wiadomości e-mail tylko wtedy, gdy kod wyjścia polecenia jest różny od zera?
Pratik Khadloya
1
@PratikKhadloya, from 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
Istnieje wiele mailximplementacji; tylko niektóre z nich oferują tę -Eopcję. Na Ubuntu chcesz pakiety bsd-mailxlub heirloom-mailx; mailutilspakiet zawiera GNU mailxpolecenia z innym -E.
Smylers
2

Innym rozwiązaniem jest napisanie skryptu powłoki z żądanym wierszem tematu, który wywołuje właściwe polecenie. W twoim przykładzie byłoby to:

#Optimize_MySQL_Database.sh

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

Możesz dołączyć katalog bin do ścieżki, ustawiając go w pliku crontab.

EEAA
źródło
0

SPRÓBUJ TO - W wierszu polecenia wprowadź następujący kod ---

/usr/local/bin/php -q /path /hostname/foldername/Page-You-want-to-execute \
   | **mail -s "*SUBJECT*" [email protected].**
  • To tylko odniesienie do prowadzenia Cię
sudhu
źródło