63 votes

Comment faire pour que crontab m'envoie un courriel avec les résultats ?

Comment puis-je faire en sorte que crontab m'envoie par courriel les résultats de ses travaux ? J'ai MAILTO=redacted@yahoo.com.au au-dessus des emplois, mais ça ne marche pas.

Je sais que je dois utiliser quelque chose comme Postfix ou Sendmail mais je n'arrive pas à trouver comment faire. J'ai cherché et cherché un guide simple sur la configuration de Postfix, mais ils sont tous extrêmement compliqués et s'attendent à ce que vous configuriez un serveur entier pour envoyer et recevoir des e-mails et que vous connaissiez tous les termes (comme, qu'est-ce qu'un nom de domaine pour les e-mails sortants ?)

Tout ce que je veux, c'est que crontab m'envoie un courriel. Pourquoi est-ce si difficile ?

Informations supplémentaires :

Mon fichier crontab ressemble à ceci :

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

Plus d'informations supplémentaires :

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

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

Je suis sûr que le cron fonctionne, mais je teste la commande mail avec echo Test | mail -s Test redacted@yahoo.com.au de toute façon.

47voto

Clonkex Points 1357

Au final, j'ai utilisé sSMTP . C'est beaucoup, beaucoup plus simple que l'un ou l'autre. Postfix o sendmail et fait le travail à merveille.

Pour référence future, voici comment utiliser sSMTP avec Yahoo Mail (ne vous inquiétez pas, c'est beaucoup moins complexe qu'il n'y paraît) :

  • Utilisez Synaptic pour télécharger ssmtp. Alternativement, vous pouvez exécuter sudo apt-get install ssmtp .

  • Ouvrez le fichier de configuration à /etc/ssmtp/ssmtp.conf .

  • Faites en sorte que la configuration ressemble à ceci :

    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
  • Créez le fichier cert.pem avec OpenSSL. J'ai utilisé la commande openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes (plus d'informations à Comment créer un certificat auto-signé avec OpenSSL ). Vous pouvez placer le fichier n'importe où, mais je l'ai simplement placé dans ~/. Où que vous le placiez, assurez-vous de faire pointer la balise TLS_CA_File= dans ssmtp.conf à l'emplacement correct.

  • Ouvrir le fichier /etc/ssmtp/revaliases et ajoutez la ligne :

    Si vous vous exécutez en tant que root, je pense que vous devez ajouter une autre ligne remplaçant votre nom par 'root'.

  • C'est tout, vous êtes prêt à partir ! Pour tester, la façon la plus simple (IMO) est de créer un fichier avec ce qui suit dedans :

    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!
  • Sauvegardez et fermez le fichier, puis vérifiez que vous n'avez pas le vrai numéro de téléphone de l'entreprise. sendmail installé, exécutez sendmail -V - il devrait dire 'sSMTP'.

  • Enfin, exécutez cat fileWithEmailInIt.txt | sendmail -i -t puis attendez quelques secondes (10-30) et vérifiez votre courriel !

De toute évidence, il faut remplacer [yourRealEmail@yahoo.com.au] avec votre adresse électronique (sans les parenthèses) et [yourRealYahooPassword] avec votre mot de passe Yahoo Mail (encore une fois, sans les crochets).

Note supplémentaire 1 : Si vous avez des problèmes avec Gmail, essayez l'option 1 de cette réponse .
(Merci à Ben Creasy !)

Note supplémentaire 2 : Si le courrier est envoyé à partir de la ligne de commande mais pas par la crontab, essayez de modifier les paramètres suivants FromLineOverride a NO sur /etc/ssmtp/ssmtp.conf . Vous pouvez également obtenir une journalisation plus détaillée en ajoutant Debug=YES a ssmtp.conf - l'enregistrement supplémentaire va à /var/log/mail.log .
(Merci Jakub Kukul !)

18voto

Mufaka Points 54

Installez Postfix. C'est plus compliqué que la plupart des autres paquets mais ce n'est toujours pas compliqué .

sudo apt-get install postfix

Sélectionnez "Site Internet", puis acceptez tous les paramètres par défaut. Il ne nous reste plus qu'à bloquer les connexions extérieures, ce qui en fait un " client nul ". Exécuter : sudoedit /etc/postfix/main.cf et trouver le inet_interfaces (vers la fin) et le changer en loopback-only comme ça :

inet_interfaces = loopback-only

Et enfin redémarrer Postfix avec sudo /etc/init.d/postfix restart (le rechargement ne fera pas l'affaire).

Vous avez maintenant une installation Postfix qui ne relaiera pas le courrier électronique pour les machines extérieures, elle acceptera seulement les connexions sur 127.0.0.1 (et ::1 pour IPv6).


Par ailleurs, vos lignes cron ne fonctionnent probablement pas parce que vous utilisez des chemins non relatifs et des chemins contenant des substitutions Bash. sh ne comprend pas ~ et il pourrait ne pas avoir une bonne PATH set. Remplacez-les donc par (je ne fais que deviner les chemins réels) :

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

Et si vos scripts doivent être exécutés à partir d'un répertoire spécifique, assurez-vous qu'ils cd dans le bon répertoire. Ne supposez pas que cron sera au bon endroit, car ce ne sera probablement pas le cas.

3voto

Oh Ar Points 31

J'ai eu beaucoup de chance avec exim4.

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

(alpine est juste le client de messagerie que j'aime utiliser)

Après ça, j'ai lancé

sudo dpkg-reconfigure exim4-config

et a suivi les instructions. Cette page : https://help.ubuntu.com/community/Exim4 a également été très utile. Il m'a fallu environ 10 minutes pour le faire fonctionner.

3voto

x-yuri Points 501

Si vous ne souhaitez pas recevoir de notifications par courrier électronique, mais que vous voulez enregistrer les résultats des tâches cron quelque part pour pouvoir les inspecter si nécessaire :

# apt install postfix

Sélectionnez "Local only" lorsque vous êtes invité à choisir un type de configuration de serveur de messagerie.

Pour confirmer que cron sera en mesure d'envoyer du courrier :

# apt install mailutils
# echo test body | mail -s 'test subject' root
# cat /var/mail/root

Vous pouvez également ajouter un cron travail :

* * * * * date

Attendez qu'il s'exécute ( journalctl -ef o watch date ), alors cat /var/mail/root .

2voto

duli Points 459

Extrait de la page de manuel sSMTP : "Il ne fait pas d'aliasing, qui doit être fait soit dans l'agent utilisateur, soit sur le mailhub. Il n'honore pas non plus les renvois, qui doivent être effectués sur l'hôte récepteur. En particulier, il ne livre pas aux pipelines."

Donc, si vous voulez recevoir tous les messages envoyés à root sur votre adresse e-mail externe, c'est une mauvaise idée d'utiliser sSMTP, car il ne supporte pas les alias.

À la place, vous pouvez utiliser postfix. C'est encore très simple. Voici comment l'utiliser avec gmail comme smtp pour l'envoi de messages :

sudo apt-get install postfix mailutils

Type général de configuration du courrier : Système satellitaire

Nom de messagerie du système : Le nom préféré entièrement qualifié du serveur de messagerie, par exemple, mail.exemple.com

Hôte du relais SMTP (vide pour aucun) : [smtp.gmail.com]:587

Ajouter à /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

Créer /etc/postfix/sasl/sasl_passwd

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

Ensuite :

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*

Editez /etc/aliases et ajoutez :

root: email@example.com

Enfin, courez :

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

Maintenant, vous pouvez tester si la redirection fonctionne :

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

J'espère que cela vous aidera.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X