Come farmi e-mail di crontab con output?


45

Come posso fare in modo che crontab mi invii un'email con l'output dei suoi lavori? Ho MAILTO=redacted@yahoo.com.ausopra i lavori, ma non funziona.

So che ho bisogno di usare qualcosa come Postfix o Sendmail ma per la vita di me non riesco a scoprire come raggiungere questo obiettivo. Ho cercato e cercato una semplice guida sull'installazione di Postfix, ma sono tutti follemente complicati e mi aspetto che tu stia configurando un intero server per inviare e ricevere e-mail e conoscere tutti i termini (come, che cos'è un nome di dominio per le email in uscita?).

Tutto quello che voglio fare è inviarmi un'e-mail a crontab. Perchè è così difficile??

Informazioni addizionali:

Il mio file crontab è simile al seguente:

MAILTO=redacted@yahoo.com.au
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

Altre informazioni aggiuntive:

L'output di ps -ef | grep '[s]endmail'

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

So per certo che cron funziona, ma sto comunque testando il comando mail echo Test | mail -s Test redacted@yahoo.com.au.


@shellter ha dimenticato di taggarti.
Clonkex,

Ottimo test! È necessario includere queste informazioni nella domanda originale. A questo punto, sono passato a essere in grado di aiutare. Sei sulla strada giusta, ma, "Perché è così difficile" .... Mi dispiace ... sarebbe che Linux / Unix sia un sistema altamente configurabile. Ognuno ha il suo caso speciale, per il quale è necessario modificare la configurazione.
shellter

Ho ricevuto la tua risposta, ma avrei speso ore su questo (probabilmente). Ancora una volta, cerca qui sendmail setup. In bocca al lupo!
shellter

@shellter Ho appena realizzato che ci sono registri per mail. In uno di questi, dice questo: 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.htmlSignifica che il comando funziona ma Yahoo sta bloccando la posta?
Clonkex,

oltre il mio voto, ma questo è un messaggio piuttosto esplicito, quindi sembrerebbe così. Come probabilmente saprai, prova a inviare da un IP diverso e vedi se passa attraverso OPPURE se il messaggio di errore cambia. Conosci http://webmasters.stackexchange.com? Probabilmente possono aiutarti meglio o meglio, chat.stackexchange.com/rooms/524/webmastersdove apparentemente tutte le domande sono benvenute (hm .. potresti aver bisogno di più rappresentanti per entrare, sei su altri siti di stackexchange?) Buona fortuna.
shellter

Risposte:


33

Alla fine ho usato sSMTP. È molto, molto più semplice di entrambi Postfixo sendmaile fa il lavoro magnificamente.

Per riferimento futuro, ecco come utilizzare sSMTP con Yahoo Mail (non preoccuparti, è molto meno complesso di quanto sembri):

  • Usa Synaptic per scaricare ssmtp. In alternativa potresti correre sudo apt-get install ssmtp.

  • Aprire il file di configurazione in /etc/ssmtp/ssmtp.conf.

  • Rendi la configurazione simile a questa:

root=[yourRealEmail@yahoo.com.au]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[yourRealEmail@yahoo.com.au]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • Creare il file cert.pem con OpenSSL. Ho usato il comando openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(maggiori informazioni qui ). Puoi incollare il file ovunque, ma l'ho appena lanciato in ~ /. Ovunque lo metti, assicurati di puntare la TLS_CA_File=linea in ssmtp.conf nella posizione corretta.

  • Apri il file /etc/ssmtp/revaliasese aggiungi la riga [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587. Se stai eseguendo come root, penso che dovresti aggiungere un'altra riga sostituendo il tuo nome con "root".

  • Ecco fatto, sei a posto! Per testare, il modo più semplice (IMO) è creare un file con al suo interno:

To: [yourRealEmail@yahoo.com.au]
From: "whateverYaWant" <[yourRealEmail@yahoo.com.au]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • Salva e chiudi il file, quindi per verificare che non sia installato il vero sendmail , esegui sendmail -V- dovrebbe dire 'sSMTP'.
  • Infine, esegui cat fileWithEmailInIt.txt | sendmail -i -t, quindi attendi qualche secondo (10-30) e controlla la tua email!

Ovviamente, sostituiscilo [yourRealEmail@yahoo.com.au]con la tua e-mail (senza parentesi) e [yourRealYahooPassword]con la tua password di Yahoo Mail (di nuovo, senza parentesi).

Nota aggiuntiva: se hai problemi con Gmail, prova l'opzione 1 di questa risposta (grazie a Ben Creasy per tali informazioni).


Là. Dovrà farlo. Ho passato troppo tempo a giocherellare con la stupida formattazione così com'è.
Clonkex,

Qual è il punto del file .pem? Vedo che questo tutorial non include uno: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard

1
Per Gmail, mi sono imbattuto in serverfault.com/questions/635139/… e ho dovuto abilitare l'accesso per app meno sicure
Ben Creasy,

2
Grazie per il suggerimento sSMTP. Ubuntu Wiki ha una guida utile (ma non usare un indirizzo e-mail per hostnamecome attualmente mostrato). Questa risposta suggerisce che è possibile utilizzare i certificati server predefiniti, ma ho scoperto che non avevo bisogno di una TLS_CA_File=linea per l'invio tramite GMail.
Mark Berry,

2
@MattM. Non deprecato, ma non mantenuto. Dovrebbe essere del tutto corretto usare sSMTP in un ambiente non di produzione :)
Clonkex,

15

Installa Postfix. È più complicato della maggior parte degli altri pacchetti ma non è ancora complicato .

sudo apt-get install postfix

Seleziona "Sito Internet" e accetta tutte le impostazioni predefinite. Quindi abbiamo solo bisogno di interrompere le connessioni esterne, trasformandolo in un " client null ". Esegui: sudoedit /etc/postfix/main.cftrova l' inet_interfacesimpostazione (vicino alla fine) e modificala in questo loopback-onlymodo:

inet_interfaces = loopback-only

E infine riavviare Postfix con sudo /etc/init.d/postfix restart(il ricaricamento non lo farà).

Ora hai un'installazione Postfix che non inoltrerà la posta elettronica per macchine esterne, accetterà solo connessioni su 127.0.0.1 (e :: 1 per IPv6).


Su una nota separata, le tue cron line probabilmente non funzionano perché stai usando percorsi non relativi e percorsi con sostituzioni di Bash. shNon capisce ~e potrebbe non avere un PATHset corretto . Quindi sostituiscili con (sto solo indovinando i percorsi reali):

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

E se i tuoi script richiedono di essere eseguiti da una directory specifica, assicurati che siano cdnella directory giusta. Non dare per scontato che cronsarà nel posto giusto come probabilmente non lo sarà.


Grazie, ma Postfix è complicato, se non altro perché non sembrano esserci semplici guide. Ad ogni modo, l'ho fatto funzionare bene con sSMTP che fa esattamente quello di cui ho bisogno ed è veramente semplice (anche se ci sono voluti ancora molti tentativi casuali e indovinabili per farlo funzionare davvero). Volevo postare una risposta, ma ho dimenticato: in realtà sono riuscito a distruggere la mia installazione del sistema operativo, quindi non appena avrò ripreso completamente
pubblicherò la

E in realtà i miei lavori cron hanno funzionato perfettamente ~/Desktop/.
Clonkex,

2
Avevo bisogno inet_interfaces = localhost. mi ha dato solo il loopbackpostfix: fatal: config variable inet_interfaces: host not found: loopback-only
Iraq

3

Ho avuto molta fortuna con exim4.

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

(alpine è solo il client di posta che mi piace usare)

Dopo quello, ho corso

sudo dpkg-reconfigure exim4-config

e seguito le istruzioni. Questa pagina: https://help.ubuntu.com/community/Exim4 è stata anche molto utile. Mi ci sono voluti circa 10 minuti per farlo funzionare.


1

Dalla manpage sSMTP: "Non esegue l'aliasing, che deve essere eseguito nell'agente utente o nel mailhub. Né onora .forwards, che devono essere eseguiti sull'host ricevente. Soprattutto non consegna alle pipeline. "

Quindi, se vuoi ricevere tutti i messaggi inviati a root sulla tua email esterna, è una cattiva idea usare sSMTP, perché non supporta gli alias.

Invece, potresti postfix utente. È ancora molto semplice. Ecco come usarlo con Gmail come smtp per l'invio di messaggi:

sudo apt-get install postfix mailutils

Tipo generale di configurazione della posta: sistema satellitare

Nome e-mail di sistema: il nome completo preferito del server di posta, ad esempio mail.example.com

Host di inoltro SMTP (vuoto per nessuno): [smtp.gmail.com]: 587

Aggiungi a /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

Crea / etc / postfix / sasl / sasl_passwd

[smtp.gmail.com]:587 emailtouseforsending@gmail.com:password

Poi:

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*

Modifica / etc / alias e aggiungi:

root: email@example.com

Infine, esegui:

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

Ora puoi verificare se il reindirizzamento funziona:

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

Spero che sia d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.