Come fare a crontab mandarmi una email con l'output?

35

Come posso farmi inviare a crontab un'email con l'output dei suoi lavori? Ho [email protected] sopra 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 ottenerlo. Ho cercato e cercato una semplice guida sulla configurazione di Postfix, ma sono tutti incredibilmente complicati e mi aspetto che tu stia configurando un intero server per inviare e ricevere email e per conoscere tutti i termini (ad esempio, che cos'è un nome di dominio per le e-mail in uscita?).

Tutto quello che voglio fare è mandarmi un'email a crontab. Perché è così difficile ??

Informazioni aggiuntive:

Il mio file crontab assomiglia a questo:

[email protected]
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 sta funzionando, ma sto testando il comando mail con echo Test | mail -s Test [email protected] comunque.

    
posta Clonkex 14.10.2014 - 02:03

4 risposte

29

Alla fine ho usato sSMTP . È molto, molto più semplice di Postfix o sendmail e 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 eseguire sudo apt-get install ssmtp .

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

  • Rendi la configurazione simile a questa:

root=[[email protected]]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[[email protected]]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • Crea 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 (ulteriori informazioni qui ). È possibile incollare il file ovunque, ma l'ho semplicemente spostato in ~ /. Ovunque lo metti, assicurati di puntare la riga TLS_CA_File= in ssmtp.conf nella posizione corretta.

  • Apri il file /etc/ssmtp/revaliases e aggiungi la riga [yourPCUsername]:[[email protected]]:smtp.mail.yahoo.com:587 . Se stai lavorando come root, penso che tu debba aggiungere un'altra linea che sostituisca il tuo nome con 'root'.

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

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!
  • Salva e chiudi il file, quindi per verificare che non hai installato sendmail reale, esegui sendmail -V - dovrebbe dire 'sSMTP'.
  • Finalmente, esegui cat fileWithEmailInIt.txt | sendmail -i -t , quindi attendi qualche secondo (10-30) e controlla la tua email!

Ovviamente, sostituisci [[email protected]] con la tua email (senza parentesi) e [yourRealYahooPassword] con la tua password di Yahoo Mail (di nuovo, senza parentesi).

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

    
risposta data Clonkex 14.10.2014 - 14:23
14

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

sudo apt-get install postfix

Seleziona "Sito Internet" e poi accetta tutti i valori predefiniti. Quindi abbiamo solo bisogno di interrompere le connessioni esterne, trasformandolo in un " client null ". Esegui: sudoedit /etc/postfix/main.cf e trova l'impostazione inet_interfaces (vicino alla fine) e modificala in loopback-only , in questo modo:

inet_interfaces = loopback-only

E finalmente riavvia Postfix con sudo /etc/init.d/postfix restart (il ricaricamento non funzionerà).

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

In una nota a parte, le tue linee cron probabilmente non funzionano perché stai usando percorsi e percorsi non relativi con sostituzioni di Bash in. sh non capisce ~ e potrebbe non avere un% co_de corretto % impostato. Quindi sostituiscile con (sto solo indovinando i percorsi effettivi):

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 PATH nella directory giusta. Non dare per scontato che cd sarà nel posto giusto come probabilmente no.

    
risposta data Oli 14.10.2014 - 10:16
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 ciò, ho eseguito

sudo dpkg-reconfigure exim4-config

e seguito attraverso le istruzioni. Anche questa pagina: link è stata molto utile. Mi ci sono voluti circa 10 minuti per farlo funzionare.

    
risposta data Oh Ar 11.09.2015 - 19:06
1

Dalla pagina di manuale sSMTP: "Non esegue l'aliasing, che deve essere eseguito nell'agente utente o nel mailhub. Inoltre non fa onore .forwards, che deve essere eseguito sull'host di ricezione. non viene consegnato alle condutture. "

Quindi, se vuoi ricevere tutti i messaggi inviati a root sul tuo indirizzo email esterno, è 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 posta di sistema: il nome completo di preferenza del server di posta, ad es. 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 [email protected]:password

Quindi:

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 protected]

Infine, esegui:

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

Ora puoi testare se il reindirizzamento funziona:

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

Spero che ti aiuti.

    
risposta data duli 02.06.2018 - 06:27

Leggi altre domande sui tag