Jak sprawić, by crontab wysłał mi wiadomość e-mail z wyjściem?

45

Jak mogę sprawić, by crontab wysłał mi e-mail z wynikami swoich zadań? Mam [email protected]powyżej pracy, ale to nie działa.

Wiem, że muszę użyć czegoś takiego jak Postfix lub Sendmail, ale przez całe życie nie mogę się dowiedzieć, jak to osiągnąć. Szukałem prostego przewodnika po konfiguracji Postfix, ale wszystkie są niesamowicie skomplikowane i oczekuję, że będziesz konfigurować cały serwer do wysyłania i odbierania wiadomości e-mail oraz znać wszystkie warunki (np. Jaka jest nazwa domeny dla wychodzących wiadomości e-mail?).

Chcę tylko, żeby crontab wysłał mi e-mail. Dlaczego to takie trudne?

Dodatkowe informacje:

Mój plik crontab wygląda następująco:

[email protected]
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

Więcej informacji dodatkowych:

Dane wyjściowe ps -ef | grep '[s]endmail'

root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections

Wiem na pewno, że cron działa, ale i tak testuję polecenie mail echo Test | mail -s Test [email protected].

Clonkex
źródło
@shellter zapomniał Cię otagować.
Clonkex
Bardzo dobre testowanie! Powinieneś zawrzeć tę informację w swoim pierwotnym pytaniu. W tym momencie jestem już w stanie pomóc. Jesteś na dobrej drodze, ale „Dlaczego to takie trudne”… Przepraszam… to by było, że Linux / Unix jest systemem wysoce konfigurowalnym. Każdy ma swój specjalny przypadek, w którym konfiguracja musi zostać zmieniona.
shellter
Dostałem twoją odpowiedź, ale spędziłbym nad tym godziny (prawdopodobnie). Ponownie wyszukaj tutaj sendmail setup. Powodzenia!
shellter
@shellter Właśnie zdałem sobie sprawę, że są dzienniki mail. W jednym z nich jest napisane: Diagnostic-Code: SMTP; 553 5.7.1 [BL21] Connections will not be accepted from [MyIPRedacted], because the ip is in Spamhaus's list; see http://postmaster.yahoo.com/550-bl23.htmlCzy to oznacza, że ​​polecenie działa, ale Yahoo blokuje pocztę?
Clonkex
poza moją płacą, ale to dość wyraźna wiadomość, więc wydaje się, że tak. Jak zapewne wiesz, spróbuj wysłać z innego adresu IP i sprawdź, czy przejdzie ono LUB jeśli komunikat błędu się zmieni. Czy znasz http://webmasters.stackexchange.com? Prawdopodobnie mogą ci pomóc lepiej lub jeszcze lepiej chat.stackexchange.com/rooms/524/webmasterstam, gdzie pozornie wszystkie pytania są mile widziane (hm .. możesz potrzebować więcej powtórzeń, aby wejść, czy jesteś na innych stronach wymiany stosów?) Powodzenia.
shellter

Odpowiedzi:

33

W końcu użyłem sSMTP. Jest to znacznie, znacznie prostsze niż albo Postfixczy sendmaili spełnia swoje zadanie pięknie.

W celu wykorzystania w przyszłości, oto jak używać sSMTP z Yahoo Mail (nie martw się, jest o wiele mniej skomplikowany niż się wydaje):

  • Użyj Synaptic, aby pobrać ssmtp. Alternatywnie możesz biegać sudo apt-get install ssmtp.

  • Otwórz plik konfiguracyjny na /etc/ssmtp/ssmtp.conf.

  • Niech konfiguracja wygląda tak:

root=[[email protected]]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[[email protected]]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • Utwórz plik cert.pem za pomocą OpenSSL. Użyłem polecenia openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(więcej informacji tutaj ). Możesz umieścić plik w dowolnym miejscu, ale właśnie wrzuciłem go do ~ /. Gdziekolwiek go umieścisz, upewnij się, że TLS_CA_File=kierujesz linię w ssmtp.conf do właściwej lokalizacji.

  • Otwórz plik /etc/ssmtp/revaliasesi dodaj linię [yourPCUsername]:[[email protected]]:smtp.mail.yahoo.com:587. Jeśli działasz jako root, pomyślałem, że musisz dodać kolejną linię, zastępując swoje imię i nazwisko „root”.

  • To wszystko, możesz już iść! Aby przetestować, najłatwiejszym sposobem (IMO) jest utworzenie pliku zawierającego następujące elementy:

To: [[email protected]]
From: "whateverYaWant" <[[email protected]]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • Zapisz i zamknij plik, a następnie, aby sprawdzić, czy nie masz zainstalowanego prawdziwego sendmaila , uruchom sendmail -V- powinien powiedzieć „sSMTP”.
  • Na koniec uruchom cat fileWithEmailInIt.txt | sendmail -i -t, a następnie poczekaj kilka sekund (10-30) i sprawdź pocztę!

Oczywiście zastąp [[email protected]]je swoim adresem e-mail (bez nawiasów) i [yourRealYahooPassword]hasłem do poczty Yahoo (ponownie, bez nawiasów).

Uwaga dodatkowa: jeśli masz problemy z Gmailem, wypróbuj opcję 1 tej odpowiedzi (dzięki Ben Creasy za te informacje).

Clonkex
źródło
Tam. To będzie musiało wystarczyć. Sporo czasu spędziłem na majstrowaniu przy głupim formatowaniu.
Clonkex
Jaki jest sens pliku .pem? Widzę, że ten samouczek nie obejmuje jednego: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard
1
W przypadku Gmaila natknąłem się na serverfault.com/questions/635139/... i musiałem umożliwić dostęp do mniej bezpiecznych aplikacji
Ben Creasy
2
Dzięki za sugestię sSMTP. Wiki Ubuntu ma pomocny przewodnik (ale nie używaj adresu e-mail dla hostnameobecnie wyświetlanego). Ta odpowiedź sugeruje, że możesz używać domyślnych certyfikatów serwera, ale okazało się, że nie potrzebuję TLS_CA_File=linii do wysyłania za pośrednictwem Gmaila.
Mark Berry
2
@MattM. Nie przestarzałe, po prostu nie utrzymywane. Używanie sSMTP w środowisku nieprodukcyjnym powinno być całkowicie w porządku :)
Clonkex
15

Zainstaluj Postfix. Jest bardziej skomplikowany niż większość innych pakietów, ale nadal nie jest skomplikowany .

sudo apt-get install postfix

Wybierz „Witryna internetowa”, a następnie zaakceptuj wszystkie wartości domyślne. Następnie musimy po prostu zatrzymać połączenia zewnętrzne, zamieniając to w „ klienta zerowego ”. Uruchom: sudoedit /etc/postfix/main.cfznajdź inet_interfacesustawienie (pod koniec) i zmień na loopback-only:

inet_interfaces = loopback-only

I wreszcie zrestartuj Postfix za pomocą sudo /etc/init.d/postfix restart(przeładowanie się nie powiedzie).

Masz teraz instalację Postfix, która nie przekaże e-maili do zewnętrznych komputerów, po prostu zaakceptuje połączenia na 127.0.0.1 (i :: 1 dla IPv6).


Na osobnej nuty, twoje linie cron prawdopodobnie nie działają, ponieważ używasz nie-względnych ścieżek, a ścieżki z podstawieniami Bash w. shNie rozumieją ~i może nie mieć odpowiedniego PATHzestawu. Zastąp je więc (zgaduję tylko rzeczywiste ścieżki):

1 0 * * *   /home/clonkex/Desktop/toskymesh.sh
59 6 * * *  /home/clonkex/Desktop/tooptus.sh
0 3 * * *   /usr/bin/snapraid sync

A jeśli twoje skrypty wymagają uruchomienia z określonego katalogu, upewnij się, że znajdują cdsię we właściwym katalogu. Nie zakładaj, że cronbędzie to właściwe miejsce, ponieważ prawdopodobnie nie będzie.

Oli
źródło
Dzięki, ale Postfix jest skomplikowany, choćby dlatego, że wydaje się, że nie ma żadnych prostych przewodników. W każdym razie mam dobrze działającą z sSMTP, która robi dokładnie to, czego potrzebuję i jest naprawdę prosta (chociaż nadal wymagało to wielu majsterkowania i przypadkowych zgadnięć, aby faktycznie zadziałało). Chciałem opublikować odpowiedź, ale zapomniałem - faktycznie udało mi się zniszczyć moją instalację systemu operacyjnego, więc jak tylko zacznę ją w pełni, opublikuję własną odpowiedź :)
Clonkex
I właściwie moje prace crona działały dobrze ~/Desktop/.
Clonkex
2
Musiałem inet_interfaces = localhost. tylko loopback dał mipostfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq
3

Miałem bardzo dużo szczęścia z exim4.

sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks

(alpine to tylko klient pocztowy, którego lubię używać)

Potem pobiegłem

sudo dpkg-reconfigure exim4-config

i wykonał polecenia. Ta strona: https://help.ubuntu.com/community/Exim4 również była bardzo pomocna. Uruchomienie go zajęło mi około 10 minut.

Oh Ar
źródło
1

Ze strony podręcznika sSMTP: „Nie wykonuje aliasingu, co musi być wykonane ani w kliencie użytkownika, ani w mailbubie. Nie honoruje również. Forwardów, które muszą być wykonane na hoście odbierającym. W szczególności nie dostarcza do potoków. „

Tak więc, jeśli chcesz otrzymywać wszystkie wiadomości wysłane do roota na twój e-mail zewnętrzny, złym pomysłem jest użycie sSMTP, ponieważ nie obsługuje aliasów.

Zamiast tego możesz postfiks użytkownika. To wciąż bardzo proste. Oto jak używać go z Gmailem jako smtp do wysyłania wiadomości:

sudo apt-get install postfix mailutils

Ogólny typ konfiguracji poczty: system satelitarny

Systemowa nazwa poczty: preferowana w pełni kwalifikowana nazwa serwera pocztowego, np. Mail.example.com

Host przekaźnika SMTP (puste dla braku): [smtp.gmail.com]: 587

Dodaj do /etc/postfix/main.cf:

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Utwórz / etc / postfix / sasl / sasl_passwd

[smtp.gmail.com]:587 [email protected]:password

Następnie:

sudo postmap /etc/postfix/sasl/sasl_passwd
sudo chown -R root:postfix /etc/postfix/sasl
sudo chmod 750 /etc/postfix/sasl
sudo chmod 640 /etc/postfix/sasl/sasl_passwd*

Edytuj / etc / aliasy i dodaj:

root: [email protected]

Na koniec uruchom:

sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service

Teraz możesz sprawdzić, czy przekierowanie działa:

echo "Test to root." | mail -s "Test message to root" root

Mam nadzieję, że to pomoże.

duli
źródło