Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Resultaten van cron jobs laten e-mailen

Pagina: 1
Acties:

Vraag


  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 22:11

aawe mwan

Wat ook leuk is:

Topicstarter
Ik wilde graag de resultaten van cron-jobs naar mijzelf laten mailen.

Dat bleek moeilijker te zijn dan ik dacht. Ik heb misschien wel meer dan 100 tutorials/websites/infopagina's bekeken, zonder het goede antwoord te vinden. Maar misschien loopt hier iemand rond die me kan vertellen waar ik had moeten kijken? Ik zal hieronder een samenvatting met wat details geven van mijn oplossing.

Ik heb als eerste ssmtp geïnstalleerd, zodat mijn computer e-mail kan versturen via de smtp server van mijn provider. Ik ontdekte dat je de bestemming van de e-mail bij ssmtp op 3 manieren kunt opgeven:
  1. Als een e-mailadres met een apestaartje
  2. Als een inlognaam, die bestaat op je lokale systeem en een ID kleiner dan 1000 heeft
  3. Als een inlognaam, die ofwel helemaal niet bestaat, ofwel bestaat met een ID >= 1000
Voor deze drie methoden het adres dat ssmtp zal doorgeven aan de geconfigureerde smtp server:
  1. Het e-mailadres dat op de commandline is opgegeven
  2. Het e-mailadres dat in ssmtp.conf staat geconfigureerd bij de setting "root="
  3. «lokale inlognaam»@«wat in ssmtp.conf staat geconfigureerd bij de setting "hostname="»
Toen de smtp server in ssmtp eenmaal goed geconfigureerd was, kon ik mail versturen op de commandline, omdat ik zelf het apestaartjeadres intypte.

Cron verstuurt e-mails naar de inlognaam van de user voor wie de job gedraaid heeft. Voor cronjobs die draaien onder user "root" is dat dus gemakkelijk, want dat is ID 0 dus daar is een aparte instelling voor.

Het mailen voor jobs die onder mijn eigen inlognaam draaien was lastiger. Mijn inlognaam wijkt af van het e-mailadres bij mijn provider, het configureren van de juiste "hostname=" in ssmtp.conf was dus geen oplossing. In bijna alle "oplossingen" die ik kon vinden, zeggen ze dat je het mailen onderdeel moet maken van de gedraaide cronjob zelf. Maar dat vind ik een laffe oplossing. Uiteindelijk bleek dat de echte oplossing heel simpel is: je kunt namelijk in de crontab een MAILTO= regel toevoegen en dan zal cron dat adres gebruiken voor ssmtp, in plaats van de username. Dit bleek uiteindelijk gewoon op de manpage te staan.

Je kunt zelfs een nette ontvangernaam configureren, in dat geval gebruik je een regel als deze in je crontab:
code:
1
MAILTO="naam<to@adres>"

waarbij naam de naam van de ontvanger is en to@adres het e-mailadres (met apestaartje) waar de mail heen moet. De to-naam mag geen spaties bevatten, ook niet als er quotes omheen staan.

老厮是麂

Alle reacties


  • vikterr
  • Registratie: februari 2017
  • Laatst online: 22:12
Makkelijkste manier is met een (python/javascript?) scriptje waarin je een api van Gmail of outlook gebruikt om de mail te versturen. Hoef je niet te gaan ruzieën met email configuratie op de server

[Voor 5% gewijzigd door Cyphax op 09-04-2021 07:39]


  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 22:11

aawe mwan

Wat ook leuk is:

Topicstarter
Dat raakt wel een beetje mijn punt, want doordat de oplossing "maak het gewoon zelf opnieuw" praktisch overal gepromoot wordt, was de echte oplossing (die veel simpeler is) bijna nergens meer te vinden.

[Voor 4% gewijzigd door aawe mwan op 08-04-2021 19:00]

老厮是麂


  • DaFeliX
  • Registratie: december 2002
  • Laatst online: 22:51

DaFeliX

Tnet Devver
@aawe mwan zoals jij het opschrijft, zou ik het ook hebben gedaan; door er eerst ervoor zorgen dat je kunt mailen vanaf de machine. Dit zal per machine anders moeten, mijn thuis PCtjes gebruikt bijvoorbeeld een externe SMTP server voor het versturen van mail, terwijl mijn server (dat ook de mailserver is) het via localhost kan doen. Het lastige hiervan is dat het bij verschillende distro's anders werkt, en er verschillende manieren zijn om dit te configureren; het is dus lastig om aan te geven 'zo-en-zo moet je het doen'. Dit 'mailen' hoeft trouwens niet eens een andere host te zijn, sommige systemen zijn geconfigureerd om alleen intern mail af te leveren.
Ik denk dat veel tutorials er vanuit gaan dat een sysadmin er reeds voor gezorgd heeft dat er gemaild kan worden vanaf de machine.

Dan voor wat betreft de ontvanger van crons. Als mail naar een ander systeem gaat, zou ik dit niet in je crontab aanpassen, maar een alias opnemen in je mailserver (bijv. in /etc/aliases voor sendmail). Het voordeel is dat dan niet alleen de mails van cron bij je binnenkomen, maar ook evt andere mail die naar de user op die machine is gestuurd. Alleen als je de mails van cron op een ander adres zou willen ontvangen, zou ik de MAILTO opnemen in de crontab.

[Voor 0% gewijzigd door DaFeliX op 09-04-2021 08:14. Reden: cryptische zinnen gefikst]

Einstein: Mijn vrouw begrijpt me niet


  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 22:11

aawe mwan

Wat ook leuk is:

Topicstarter
DaFeliX schreef op vrijdag 9 april 2021 @ 07:40:
Dan voor wat betreft de ontvanger van crons. Als mail naar een ander systeem gaat, zou ik dit niet in je crontab aanpassen, maar een alias opnemen in je mailserver (bijv. in /etc/aliases voor sendmail).
Die tip had ik gezien, maar ssmtp ondersteunt geen /etc/aliases.
Ik zie dat er alternatieven voor ssmtp in de repository zitten, dus daar zou ik eens naar moeten kijken.

老厮是麂


  • vikterr
  • Registratie: februari 2017
  • Laatst online: 22:12
var nodeoutlook = require('nodejs-nodemailer-outlook')
nodeoutlook.sendEmail({
auth: {
user: "sender@outlook.com",
pass: "********"
},
from: 'sender@outlook.com',
to: 'receiver@gmail.com',
subject: 'Hey you, awesome!',
html: '<b>This is bold text</b>',
text: 'This is text version!',
replyTo: 'receiverXXX@gmail.com',
attachments: [
{
filename: 'text1.txt',
content: 'hello world!'
},
{ // binary buffer as an attachment
filename: 'text2.txt',
content: new Buffer('hello world!','utf-8')
},
{ // file on disk as an attachment
filename: 'text3.txt',
path: '/path/to/file.txt' // stream this file
},
{ // filename and content type is derived from path
path: '/path/to/file.txt'
},
{ // stream as an attachment
filename: 'text4.txt',
content: fs.createReadStream('file.txt')
},
{ // define custom content type for the attachment
filename: 'text.bin',
content: 'hello world!',
contentType: 'text/plain'
},
{ // use URL as an attachment
filename: 'license.txt',
path: 'https://raw.github.com/nodemailer/nodemailer/master/LICENSE'
},
{ // encoded string as an attachment
filename: 'text1.txt',
content: 'aGVsbG8gd29ybGQh',
encoding: 'base64'
},
{ // data uri as an attachment
path: 'data:text/plain;base64,aGVsbG8gd29ybGQ='
},
{
// use pregenerated MIME node
raw: 'Content-Type: text/plain\r\n' +
'Content-Disposition: attachment;\r\n' +
'\r\n' +
'Hello world!'
}
],
onError: (e) => console.log(e),
onSuccess: (i) => console.log(i)
}


);
Met https://www.npmjs.com/package/nodejs-nodemailer-outlook bijvoorbeeld. Node installeren op je machine, dan als cron scriptje uitvoeren

Acties:
  • +1Henk 'm!

  • Hero of Time
  • Registratie: oktober 2004
  • Laatst online: 20-04 10:33

Hero of Time

Moderator NOS

There is only one Legend

Zou persoonlijk niet zulke oplossingen gaan gebruiken, want updates moet je ook weer zelf regelen, bugs zijn een serieus ding en het voelt meer als een hobbyproject 'omdat het kan' dan echt functioneel. Dan pak ik veel liever Exim of Postfix uit de repo, bewezen MTAs met voldoende documentatie en bestaan lang genoeg om er zeker van te zijn dat het werkt. Een spontane update van het onderliggende framework (eh, welke bij deze? ;)) zorgt er ook niet voor dat het spontaan stopt met werken.

Commandline FTW | Tweakt met mate


  • vikterr
  • Registratie: februari 2017
  • Laatst online: 22:12
Nodemailer wordt elke week 1.5 miljoen keer gedownload... Is niet alsof het even in elkaar is gehackt.

  • Hero of Time
  • Registratie: oktober 2004
  • Laatst online: 20-04 10:33

Hero of Time

Moderator NOS

There is only one Legend

Omdat het waarschijnlijk in een reeds bestaand node.js project wordt gebruikt. Ik zou het nooit als MTA gaan inzetten om zoals in dit topic m'n cron resultaten te laten mailen. Het is namelijk een extra pakket dat handmatig gecontroleerd moet worden op updates. Als NodeJS zelf een update krijgt wat je mailer sloopt, omdat je mailer er niet mee overweg kan, heb je niets meer. Of als het project een nieuwere versie vereist terwijl je distro die niet levert, heb je ook weer wat.

Die risico's wil je gewoon niet nemen als het enige is dat je wilt, dat mails van cron in je inbox komen. Daar zijn 1001 betere oplossingen voor.

Commandline FTW | Tweakt met mate


  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 22:11

aawe mwan

Wat ook leuk is:

Topicstarter
Ik sta perplex.

Het emailen van cronjobs werkt perfect op mijn machine die draait onder Ubuntu 20.04, maar het werkt NIET onder Ubuntu 20.10. Terwijl de configuratie identiek moet zijn want via Ansible uitgerold.

Met Debug=YES zie ik dat er verschil zit in het afzenderadres: dat is ongeldig in Ubuntu 20.10.

De oorzaak daarvan blijkt te zitten in:
Ubuntu 20.04 heeft ssmtp 2.64-8.1ubuntu1 in de repository,
Ubuntu 20.10 heeft ssmtp 2.64-9 in de reposiry.

Cron zelf schrijft altijd een ongeldige regel "From: root (Cron Daemon)" in de mail, dus mijn provider (en menig andere) zal deze mail weigeren. (Dit is een bug die gemeld is in februari 2018 en die eind februari 2021 gefixt is.) Gelukkig kan je in ssmtp de setting "FromLineOverride=NO" configureren, zodat ssmtp zelf de From in de communicatie naar de smtp-server toe vervangt door een geldig afzenderadres.

Ik vind een bugreport op ssmtp 2.64-9 amd64, dat deze setting van ssmtp ineens niet meer werkt.
Dat is dus waar ik nu last van heb.

Toen ik nog wat verder zocht, vond ik bizar genoeg een oudere bug:
Found in version ssmtp/2.64-8
Fixed in version ssmtp/2.64-9
De bugmelding was toen... dat ssmtp de From regel in de mail verandert.

老厮是麂


  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 22:11

aawe mwan

Wat ook leuk is:

Topicstarter
Dit lijkt voor Ubuntu 20.10 een work-around te zijn:

$ cat /usr/sbin/sendmail
#!/bin/bash
grep --invert-match '^From: root [(]Cron Daemon[)]$' | /usr/sbin/ssmtp "$@"

[Voor 13% gewijzigd door aawe mwan op 10-04-2021 09:33]

老厮是麂


  • MartenBE
  • Registratie: december 2012
  • Laatst online: 12-04 12:48
Ik gebruik hier een Matrix account voor; een simpele POST script in bash/python is voldoende. Geen geknoei met e-mail en problemen met spam filters etc. Er bestaan ook al bestaande scripts hiervoor: https://github.com/8go/matrix-commander is wat je zoekt volgens mij

[Voor 68% gewijzigd door MartenBE op 11-04-2021 00:13]


  • DJMaze
  • Registratie: juni 2002
  • Niet online
Je kan je cronjobs ook gewoon pipen naar een bestand.
Een andere cron e-mailt dan de resultaten.

Ipv e-mail zou je ook gewoon een offline rsync die bestanden kunnen ophalen.
Persoonlijk ben ik hier meer tevreden mee dan e-mail

Maak je niet druk, dat doet de compressor maar


  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 22:11

aawe mwan

Wat ook leuk is:

Topicstarter
DJMaze schreef op zondag 11 april 2021 @ 11:23:
Je kan je cronjobs ook gewoon pipen naar een bestand.
Een andere cron e-mailt dan de resultaten.
dan e-mail
Die was ik bijna vergeten. Het ligt niet voor de hand dat je dit kunt doen, maar het kan inderdaad en ik heb precies het tegenovergestelde wel eens gebruikt: >/dev/null omdat ik van die bepaalde cronjob de gewone output juist niet in de mail wilde zien.

[Voor 3% gewijzigd door aawe mwan op 11-04-2021 18:58]

老厮是麂

Pagina: 1


Apple iPhone 12 Microsoft Xbox Series X LG CX Google Pixel 5 Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True