¿Cómo hacer que crontab me envíe un correo electrónico con salida?


45

¿Cómo puedo hacer que crontab me envíe un correo electrónico con la salida de sus trabajos? Tengo por MAILTO=redacted@yahoo.com.auencima de los trabajos, pero no funciona.

Sé que necesito usar algo como Postfix o Sendmail, pero por mi vida no puedo descubrir cómo lograr esto. He buscado y buscado una guía simple sobre la configuración de Postfix, pero todos son increíblemente complicados y esperan que esté configurando un servidor completo para enviar y recibir correo electrónico y conocer todos los términos (como qué es un nombre de dominio para correos electrónicos salientes?).

Todo lo que quiero hacer es que crontab me envíe un correo electrónico. ¿¿Porque esto es tan difícil??

Información adicional:

Mi archivo crontab se ve así:

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

Más información adicional:

La salida de ps -ef | grep '[s]endmail'

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

Sé con certeza que cron funciona, pero de echo Test | mail -s Test redacted@yahoo.com.autodos modos estoy probando el comando de correo .


@shellter olvidó etiquetarte.
Clonkex

Muy buena prueba! Debe incluir esta información en su pregunta original. En este punto, ya no puedo ayudar. Estás en el camino correcto, pero, "¿Por qué es tan difícil" ... Lo siento ... eso sería que Linux / Unix es un sistema altamente configurable. Cada uno tiene su propio caso especial, por el cual se debe cambiar la configuración.
Shellter

Recibí tu respuesta, pero pasaría horas en esto (probablemente). Nuevamente, busque aquí sendmail setup. ¡Buena suerte!
Shellter

@shellter Me acabo de dar cuenta de que hay registros mail. En uno de ellos, dice esto: 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.html¿Esto significa que el comando está funcionando pero Yahoo está bloqueando el correo?
Clonkex

más allá de mi salario, pero ese es un mensaje bastante explícito, por lo que parece. Como probablemente ya sepa, intente enviar desde una IP diferente y vea si pasa a través de O si el mensaje de error cambia. Sabe usted de http://webmasters.stackexchange.com? Probablemente puedan ayudarlo mejor o mejor aún chat.stackexchange.com/rooms/524/webmasterscuando aparentemente todas las preguntas son bienvenidas (hm ... es posible que necesite más representantes para ingresar, ¿está en algún otro sitio de intercambio de pila?) Buena suerte.
Shellter

Respuestas:


33

Al final lo usé sSMTP. Es mucho, mucho más simple que sea Postfixo sendmaily hace el trabajo muy bien.

Para referencia futura, aquí le mostramos cómo usar sSMTP con Yahoo Mail (no se preocupe, es mucho menos complejo de lo que parece):

  • Use Synaptic para descargar ssmtp. Alternativamente, podrías correr sudo apt-get install ssmtp.

  • Abra el archivo de configuración en /etc/ssmtp/ssmtp.conf.

  • Haga que la configuración se vea así:

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
  • Cree el archivo cert.pem con OpenSSL. He utilizado el comando openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(más información aquí ). Puedes pegar el archivo en cualquier lugar, pero acabo de tirarlo en ~ /. Donde sea que lo coloque, asegúrese de apuntar la TLS_CA_File=línea en ssmtp.conf a la ubicación correcta.

  • Abra el archivo /etc/ssmtp/revaliasesy agregue la línea [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587. Si se está ejecutando como root, creo que debe agregar otra línea que reemplace su nombre con 'root'.

  • Eso es todo, estás listo para ir! Para probar, la forma más fácil (IMO) es crear un archivo con lo siguiente:

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!
  • Guarde y cierre el archivo, luego, para verificar que no tiene instalado el verdadero sendmail , ejecute sendmail -V: debe decir 'sSMTP'.
  • Finalmente, corre cat fileWithEmailInIt.txt | sendmail -i -t, luego espera unos segundos (10-30) y revisa tu correo electrónico.

Obviamente, reemplace [yourRealEmail@yahoo.com.au]con su correo electrónico (sin los corchetes) y [yourRealYahooPassword]con su contraseña de Yahoo Mail (nuevamente, sin los corchetes).

Nota adicional: si tiene problemas con Gmail, pruebe la opción 1 de esta respuesta (gracias a Ben Creasy por esa información).


Ahí. Eso tendrá que hacer. He pasado demasiado tiempo jugando con el formato tonto como es.
Clonkex

¿Cuál es el punto del archivo .pem? Veo que este tutorial no incluye uno: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard

1
Para Gmail, me encontré con serverfault.com/questions/635139/… y tuve que habilitar el acceso para aplicaciones menos seguras
Ben Creasy

2
Gracias por la sugerencia de sSMTP. Ubuntu Wiki tiene una guía útil (pero no use una dirección de correo electrónico hostnamecomo se muestra actualmente). Esta respuesta sugiere que puede usar certificados de servidor predeterminados, pero descubrí que no necesitaba una TLS_CA_File=línea para enviar a través de GMail.
Mark Berry

2
@MattM. No obsoleto, simplemente no mantenido. Debería estar totalmente bien usar sSMTP en un entorno que no sea de producción :)
Clonkex

15

Instalar Postfix. Es más complicado que la mayoría de los otros paquetes, pero aún no es complicado .

sudo apt-get install postfix

Seleccione "Sitio de Internet" y luego acepte todos los valores predeterminados. Entonces solo necesitamos detener las conexiones externas, convirtiendo esto en un " cliente nulo ". Ejecutar: sudoedit /etc/postfix/main.cfy encuentre la inet_interfacesconfiguración (cerca del final) y cámbiela a loopback-only, así:

inet_interfaces = loopback-only

Y finalmente reinicie Postfix con sudo /etc/init.d/postfix restart(la recarga no funcionará).

Ahora tiene una instalación Postfix que no retransmitirá el correo electrónico para máquinas externas, solo aceptará conexiones en 127.0.0.1 (y :: 1 para IPv6).


En una nota separada, sus líneas cron probablemente no funcionen porque está usando rutas no relativas y rutas con sustituciones de Bash en. shNo entiende ~y puede que no tenga un PATHconjunto adecuado . Así que reemplácelos con (solo estoy adivinando los caminos reales):

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

Y si sus scripts requieren ejecutarse desde un directorio específico, asegúrese de que estén cden el directorio correcto. No asuma que cronestará en el lugar correcto, ya que probablemente no lo hará.


Gracias, pero Postfix es complicado, aunque solo sea porque parece que no hay guías simples en absoluto. De todos modos, lo conseguí funcionando bien con sSMTP, que hace exactamente lo que necesito y es realmente simple (aunque todavía me costó un montón de adivinanzas y adivinanzas aleatorias para que realmente funcionara). Tenía la intención de publicar una respuesta, pero lo olvidé: en realidad logré destruir la instalación de mi sistema operativo, así que tan pronto como vuelva a funcionar completamente, publicaré mi propia respuesta :)
Clonkex

Y en realidad mis trabajos cron funcionaban bien ~/Desktop/.
Clonkex

2
Que necesitaba inet_interfaces = localhost. loopback-only me diopostfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq

3

Tuve mucha suerte con exim4.

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

(Alpine es solo el cliente de correo que me gusta usar)

Después de eso, corrí

sudo dpkg-reconfigure exim4-config

y seguí las indicaciones. Esta página: https://help.ubuntu.com/community/Exim4 también fue muy útil. Me llevó unos 10 minutos ponerlo en funcionamiento.


1

De la página de manual de sSMTP: "No hace aliasing, que debe hacerse en el agente de usuario o en el mailhub. Tampoco respeta .forwards, que deben hacerse en el host receptor. Especialmente no se entrega a las tuberías. "

Por lo tanto, si desea recibir todos los mensajes enviados a la raíz en su correo electrónico externo, es una mala idea usar sSMTP, ya que no admite alias.

En su lugar, podría usar postfix. Aún es muy simple. Aquí le mostramos cómo usarlo con gmail como su smtp para enviar mensajes:

sudo apt-get install postfix mailutils

Tipo general de configuración de correo: sistema satelital

Nombre del correo del sistema: el nombre completo calificado del servidor de correo, por ejemplo, mail.example.com

Host de retransmisión SMTP (en blanco para ninguno): [smtp.gmail.com]: 587

Añadir 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

Crear / etc / postfix / sasl / sasl_passwd

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

Entonces:

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*

Edite / etc / alias y agregue:

root: email@example.com

Por último, ejecuta:

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

Ahora, puede probar si la redirección funciona:

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

Espero eso ayude.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.