web-dev-qa-db-fra.com

Comment faire crontab m'envoyer un email avec la sortie?

Comment puis-je faire en sorte que crontab m'envoie par e-mail le résultat de ses travaux? J'ai [email protected] au-dessus des emplois, mais cela ne fonctionne pas.

Je sais que je dois utiliser quelque chose comme Postfix ou Sendmail, mais je ne peux pas trouver comment y parvenir. J'ai cherché et cherché un guide simple sur la configuration de Postfix, mais ils sont tous incroyablement compliqués et s'attendent à ce que vous configuriez un serveur entier pour envoyer et recevoir des emails et connaître tous les termes (comme, qu'est-ce qu'un nom de domaine? pour les emails sortants?).

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

Informations supplémentaires:

Mon fichier crontab ressemble à ceci:

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

Plus d'infos supplémentaires:

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

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

Je sais que cron fonctionne, mais je teste quand même la commande mail avec echo Test | mail -s Test [email protected].

41
Clonkex

Finalement, j'ai utilisé sSMTP. C'est beaucoup, beaucoup plus simple que Postfix ou 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. Sinon, 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=[[email protected]]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[[email protected]]
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'infos ici ). Vous pouvez coller le fichier n'importe où, mais je l'ai simplement jeté dans ~ /. Où que vous le mettiez, assurez-vous de pointer la ligne TLS_CA_File= de ssmtp.conf au bon emplacement.

  • Ouvrez le fichier /etc/ssmtp/revaliases et ajoutez la ligne [yourPCUsername]:[[email protected]]:smtp.mail.yahoo.com:587. Si vous utilisez root, je pense que vous devez ajouter une autre ligne en remplaçant votre nom par "root".

  • Ça y est, vous êtes prêt à partir! Pour tester, le moyen le plus simple (IMO) consiste à créer un fichier contenant les éléments suivants:

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!
  • Enregistrez et fermez le fichier, puis pour vérifier que vous n'avez pas installé le réel sendmail , exécutez sendmail -V - il devrait indiquer 'sSMTP'.
  • Enfin, lancez cat fileWithEmailInIt.txt | sendmail -i -t, puis attendez quelques secondes (10-30) et vérifiez votre courrier électronique!

Évidemment, remplacez [[email protected]] par votre email (sans les crochets) et [yourRealYahooPassword] par votre mot de passe Yahoo Mail (encore une fois, sans les crochets).

Remarque supplémentaire: Si vous rencontrez des problèmes avec Gmail, essayez l'option 1 de cette réponse (merci à Ben Creasy pour ces informations) .

32
Clonkex

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 toutes les valeurs par défaut. Ensuite, nous devons juste arrêter les connexions extérieures, en transformant cela en " client nul ". Exécutez: sudoedit /etc/postfix/main.cf et recherchez le paramètre inet_interfaces (près de la fin) et remplacez-le par loopback-only, comme suit:

inet_interfaces = loopback-only

Et enfin, redémarrez Postfix avec Sudo /etc/init.d/postfix restart (le rechargement ne fera pas).

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


Sur une note séparée, vos lignes cron ne fonctionnent probablement pas car vous utilisez des chemins non relatifs et des chemins avec des substitutions de Bash dans. sh ne comprend pas ~ et il se peut que son ensemble PATH ne soit pas correct. Alors remplacez-les par (je devine juste 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 sont cd dans le bon répertoire. Ne présumez pas que cron sera au bon endroit car ce ne sera probablement pas le cas.

14
Oli

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 cela, j'ai couru

Sudo dpkg-reconfigure exim4-config

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

3
Oh Ar

Depuis la page de manuel sSMTP: "Il ne fait pas de crénelage, ce qui doit être fait soit dans l’agent utilisateur, soit dans le mailhub. Il n’honore pas non plus .forwards, ce qui doit être fait sur l’hôte receveur. livrer aux pipelines. "

Donc, si vous souhaitez recevoir tous les messages envoyés à root sur votre courrier électronique externe, il est déconseillé d’utiliser sSMTP, car il ne prend pas en charge les alias.

Au lieu de cela, 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 satellite

Nom de messagerie système: nom complet préféré du serveur de messagerie, par exemple, mail.example.com

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

Ajoutez à /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éez/etc/postfix/sasl/sasl_passwd

[smtp.gmail.com]:587 [email protected]: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*

Éditez/etc/aliases et ajoutez:

root: [email protected]

Enfin, lancez:

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 ça aide.

1
duli