/etc/cron.daily/foo: Czy wysłać e-mail do konkretnego użytkownika zamiast roota?

13

Używam CentOS 5.5.

Mamy kilka cronjobs zapisanych w /etc/cron.daily/. Chcielibyśmy, aby e-mail niektórych z tych cronjobs był kierowany na określony adres e-mail, a pozostałe e-maile w /etc/cron.daily/ powinny mieć domyślny adres e-mail (root @ localhost).

Cronjobs w /etc/cron.daily/ są uruchamiane z pliku / etc / crontab. / etc / crontab określa pole „MAILTO”. Czy mogę to zmienić, ustawiając MAILTO w moim /etc/cron.daily/foo cronjob?

Jaki jest najlepszy sposób, aby sobie z tym poradzić?

Stefan Lasiewski
źródło
Uwaga dla użytkowników CentOS 6.5 (cronie): /etc/crontabnie określa wartości domyślnych.
Adam Monsen

Odpowiedzi:

13

Ustawianie [email protected]w /etc/cron.daily/foonie działa. Dane wyjściowe skryptu nie są wysyłane na adres uż[email protected].

Strona http://www.unixgeeks.org/security/newbie/unix/cron-1.html sugeruje również proste rozwiązanie:

Plik /etc/cron.daily/foozawiera teraz następujące elementy:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]

Spowoduje to wysłanie wiadomości e-mail na adres „[email protected]” z tematem równym pełnej ścieżce skryptu (np /etc/cron.daily/foo.).

Oto, co na ten temat mówi Unixgeeks.org:

Wyjście z crona

Jak powiedziałem wcześniej, dane wyjściowe z crona są wysyłane pocztą do właściciela procesu lub osoby określonej w zmiennej MAILTO, ale co, jeśli tego nie chcesz? Jeśli chcesz wysłać dane wyjściowe do kogoś innego, możesz po prostu przesłać dane wyjściowe do poczty poleceń. na przykład

cmd | mail - użytkownik „Temat poczty”

Czasami chcę otrzymywać tylko błędy od kumpla, a nie od standardowego, więc używam tej sztuczki. Na pierwszy rzut oka składnia może wyglądać niepoprawnie, ale zapewniamy, że działa. Następujący cronjob wyśle ​​STDOUT do / dev / null, a następnie obsłuży STDERR przez potok.

doit 2>&1 >/dev/null | mailx -s "$0" [email protected]

To samo, ale wyślij do syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Zobacz także moją odpowiedź na ServerFault do Cronjob stderr na plik i e-mail

Stefan Lasiewski
źródło
6

Bardziej eleganckim rozwiązaniem byłoby użycie /etc/cron.dbezpośrednio. Zamiast mieć skrypt w środku /etc/cron.daily, umieść go gdzieś jak, /usr/local/sbin/myscript.sha następnie utwórz plik /etc/cron.d/myscriptjako:

MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Daje to również o wiele większą kontrolę nad momentem wykonania zadania; na przykład tylko w niektóre dni powszednie itp. Zobacz crontab(5)mężczyznę, aby uzyskać więcej informacji.

pismo kodowe
źródło
0

Zakładając, że masz dostęp SA na tym komputerze, możesz utworzyć nowe konto użytkownika, dodać zadania do zadań cron tych kont. Poczta dla tego użytkownika może być następnie przekazana przy użyciu pliku .forward w tym folderze domowym kont. Może być konieczne skonfigurowanie uprawnień dla tego użytkownika, jeśli zadania cron wymagają uprzywilejowanego dostępu.

To, czy odpowiedź Stefana najlepiej pasuje, naprawdę zależy od tego, ile kłopotów chcesz skonfigurować i czy chcesz, aby komunikaty o błędach trafiały do ​​głównego konta e-mail, czy do osób, które normalnie monitorują codzienną wydajność.

Powodzenia

Michael Shaw
źródło