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

45

Comment puis-je faire en sorte que crontab m'envoie par e-mail le résultat de ses travaux? J'ai au- [email protected]dessus des emplois, mais ça ne marche 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??

Information additionnelle:

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 la commande mail avec de echo Test | mail -s Test [email protected]toute façon.

Clonkex
la source
@shellter a oublié de vous taguer.
Clonkex
Très bon test! Vous devriez inclure cette information dans votre question initiale. À ce stade, je suis passé à pouvoir aider. Vous êtes sur la bonne voie, mais "Pourquoi est-ce si difficile" ... Désolé ... ce serait que Linux / Unix est un système hautement configurable. Chacun a son propre cas particulier pour lequel la configuration doit être modifiée.
shellter
Vous avez votre réponse, mais je passerais des heures à cela (probablement). Encore une fois, chercher ici pour sendmail setup. Bonne chance!
shellter
@shellter Je viens de me rendre compte qu'il y a des journaux mail. Dans l'un d'eux, il est écrit ceci: 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.htmlCela signifie-t-il que la commande fonctionne mais que Yahoo bloque le courrier?
Clonkex
au-delà de mon niveau de rémunération, mais c'est un message assez explicite, donc il semblerait que oui. Comme vous le savez probablement, essayez d’envoyer depuis une adresse IP différente et voyez si elle passe par OU si le message d’erreur change. Est-ce que tu sais http://webmasters.stackexchange.com? Ils peuvent probablement vous aider, mieux ou encore, chat.stackexchange.com/rooms/524/webmasterslà où apparemment toutes les questions sont les bienvenues (hm… vous aurez peut-être besoin de plus de représentants pour entrer, êtes-vous sur un autre site stackexchange?) Bonne chance.
shellter

Réponses:

33

À la fin j'ai utilisé sSMTP. C'est beaucoup, beaucoup plus simple que l'un Postfixou l' autre sendmailet 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 courir 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 TLS_CA_File=mettiez , assurez-vous de pointer la ligne du fichier ssmtp.conf au bon endroit.

  • Ouvrez le fichier /etc/ssmtp/revaliaseset 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 véritable sendmail , exécutez sendmail -V- il devrait indiquer 'sSMTP'.
  • Enfin, lancez cat fileWithEmailInIt.txt | sendmail -i -t, 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).

Clonkex
la source
Là. Cela devra faire. J'ai passé beaucoup trop de temps à tripoter le formatage idiot tel qu'il est.
Clonkex
Quel est le point du fichier .pem? Je vois que ce tutoriel n'en comprend pas un: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard
1
Pour Gmail, j'ai rencontré serverfault.com/questions/635139/… et je devais permettre l'accès à des applications moins sécurisées
Ben Creasy
2
Merci pour la suggestion de sSMTP.Le Wiki Ubuntu a un guide utile (mais n’utilisez pas une adresse électronique hostnamecomme indiqué). Cette réponse suggère que vous pouvez utiliser des certificats de serveur par défaut, mais j'ai constaté que je n'avais pas besoin d'une TLS_CA_File=ligne pour l'envoi via GMail.
Mark Berry
2
@MattM. Non obsolète, mais non maintenu. Il devrait être parfaitement correct d'utiliser sSMTP dans un environnement hors production :)
Clonkex
15

Installez Postfix. C'est plus compliqué que la plupart des autres packages 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 simplement arrêter les connexions extérieures, en transformant cela en " client nul ". Exécuter: sudoedit /etc/postfix/main.cfet trouver le inet_interfacesparamètre (vers la fin) et le changer en 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 uniquement 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. shNe comprend pas ~et il se peut qu’il ne soit pas correctement PATHdéfini. 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 de les placer cddans le bon répertoire. Ne présumez pas que ce cronsera au bon endroit car ce ne sera probablement pas.

Oli
la source
Merci, mais Postfix est compliqué, ne serait-ce que parce qu'il semble n'y avoir aucun guide simple. Quoi qu'il en soit, je l'ai très bien fonctionné avec sSMTP, qui fait exactement ce dont j'ai besoin et qui est véritablement simple (même s'il a fallu encore beaucoup de bidouilles et de suppositions aléatoires pour que cela fonctionne réellement). Je voulais poster une réponse, mais j'ai oublié - j'ai effectivement réussi à détruire mon système d'exploitation . Dès que tout recommencera, je
posterai
Et en fait, mes emplois cron fonctionnaient parfaitement ~/Desktop/.
Clonkex
2
J'avais besoin inet_interfaces = localhost. loopback-only m'a donnépostfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq
3

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.

Oh Ar
la source
1

De 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 récepteur. Il ne livre surtout pas les 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 (vierge 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.

duli
la source