Tworzę zadania cron w Ubuntu, umieszczając plik wykonywalny w jednym z nich /etc/cron.{daily,hourly,monthly,weekly}
. Istnieje wiele katalogów zaczynających się od crona:
kent@rat:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root 724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly
Chcę otrzymywać wiadomości e-mail ze swoich skryptów, gdy:
- Skrypt kończy się niepowodzeniem i podaje kod wyjściowy niezerowy.
- Skrypt ma mi coś do powiedzenia
Mam zainstalowany i działający SSMTP , wysyłam pocztę z mojego konta Google. Fakt, że SSMTP może wysyłać pocztę tylko za pomocą jednego konta, nie stanowi dla mnie problemu. To tylko serwer domowy, a użytkownicy, których mam, nie mają możliwości dodawania zadań cron.
Chciałbym wiedzieć, jak mailing ze skryptów zwykle działa w systemie Linux / Unix w ogóle, a szczególnie w Ubuntu. Chciałbym również wiedzieć, w jaki sposób mogę uzyskać wiadomości e-mail w dwóch powyższych sytuacjach.
/etc/aliases
wpisy nie powinny być zgodne z tym formatemname: value1, value2, ...
? Nie wiem, może format został zmieniony w pewnym momencie w ciągu ostatnich 8 lat.Aby otrzymać e-mail wysłany z vixie cron, będziesz potrzebować czegoś, co replikuje polecenie sendmail. Więc zainstalowanie Postfiksa lub SSMTP rozwiąże tę część. Jeśli używasz Postfiksa, plik aliasów może być użyty do mapowania użytkowników systemu na prawdziwe adresy e-mail.
Dodanie MAILTO = „[email protected]” na górze tabeli crontab spowoduje wysłanie wiadomości e-mail z danymi wyjściowymi z zadania cron. Jest to niezależne od kodu błędu.
W przypadku skryptów, które poprawnie wyświetlają błędy w STDERR, łatwo jest wysłać je e-mailem tylko wtedy, gdy się nie udają:
Spowoduje to przekierowanie tylko STDOUT na zero. Jeśli jakieś wiadomości STDERR są obecne, otrzymają wiadomość e-mail.
Odkryłem jednak, że niektóre skrypty wyświetlają błędy niepoprawnie jako STDOUT i ustawiam kod wyjścia na 1. Nie znalazłem sposobu na pobranie z nich danych wyjściowych, ale ignoruję dane wyjściowe, jeśli kod wyjścia to 0. Jedyna metoda Mogę myśleć o przekierowaniu danych wyjściowych do pliku, a jeśli kod wyjścia nie jest równy 0, plik ten ma zostać pobrany przez crona. Wydaje się to dość okropne.
źródło
Jeśli chcesz wysłać wszystkie dane wyjściowe (stdout i stderr) na określony adres, możesz użyć
MAILTO
zmiennej. Na przykład umieść następujące na górze skryptu.źródło
spróbuj dodać „root: twó[email protected]” do / etc / aliases
który wyśle wszystkie wiadomości tego użytkownika na Twój adres e-mail. jeśli nie chcesz wszystkich wiadomości, możesz utworzyć użytkownika specjalnie do tego.
Dopóki skrypt coś wypisze, dostaniesz wiadomość.
źródło
Na wszystkich moich serwerach produkcyjnych, które zwykle uruchamiają około 20 cronjobs dziennie, przysięgam na pakiet python-cronwrap. Sprawdź to tutaj: http://pypi.python.org/pypi/cronwrap . Jest naprawdę łatwy w konfiguracji i przede wszystkim niezawodny.
źródło
Nie sądzę, że SSMTP zależy od tego, czego potrzebujesz. Potrzebujesz czegoś, co może „odbierać” pocztę z procesów cron, a następnie wysyłać ją do prawdziwej skrzynki pocztowej.
Używam Sendmaila, ale to dlatego, że jestem starą ręką Słońca; Wiem, że śmieje się z tego wszystkich fajnych dzieciaków, które używają Postfix. Twoja społeczność ubuntu może poprowadzić Cię przez proces konfiguracji systemu pocztowego.
źródło
Alternatywa - archiwizuję całą pocztę główną do niektórych plików, a następnie usuwam oryginalną pocztę.
I cron skryptu (tutaj jest kluczowa część) -
Dzięki temu wszystko jest uporządkowane i mogę mieć to na oku. Mógłbym wysłać codzienny plik poczty e-mail na zewnętrzny identyfikator e-maila itp.
źródło