Alle zwei Stunden eine Mail versenden - Linux

Also, ich beschreibe mal etwas die Ausgangssituation:
Ich hab ein Java Programm, das alle zwei Stunden laufen soll. Es schreibt etwas auf die Standardausgabe. Das riecht ja schon nach Cron…
Jetzt ist’s so, dass die Ausgabe wichtig ist, ich möchte die gern als Mail habn. Das riecht in Debian nach Exim and Postfix…
Allerdings möchte ich auch nicht so gern einen Mailserver “aufsetzen” und ich scheue mich auch vor der Konfiguration von Exim…
Dann hab ich nach Alternativen zu Cron mit integriertem Mail"service" gesucht… Das war ernüchternd, da alle auf die “Standardfunktionalitäten” aufsetzen…
Alternativ könnte ich den Scheduler und den Mail"service" selber in Java schreiben (hab ich auch schon gemacht), aber dann würdn gleichzeitig zwei Java Programme (also jre’s) laufen, und das sind mir zuviele Ressourcen…

Was würdet ihr mir da raten? (Oder was wären überhaupt die richtigen Suchbegriffe?^^)

:wink: Hab’s hinbekommen. Cron möchte Exim und Postfix. fcron möchte sendmail. mutt möchte auch sendmail.

Workaround:

Ladet euch fcron (.tar.gz…), Magic:

./configure --without-sendmail

(weniger Abhängigkeiten, insbesondere wird kein "Nachrichten"system benötigt.)

Ladet euch mutt (.tar.gz…), Magic:

./configure --enable-imap --enable-smtp --with-gnutls --with-sasl --with-gss

(installiert die dazu benötigten dev-libs manuell) damit ist es möglich, das auf z. B. Gmail einzustellen.

Der Rest ist dann nicht so kompliziert, für fcron:

@ 120 cd /home/icke/dist/ && xvfb-run java -jar TestJar1.jar > ausgabe.txt 2>&1 && mutt Irgend eine Adresse @gmail.com -s “Nen Ausgabe” < ausgabe.txt

(heiße nicht icke und irgendeine adresse auch nicht :wink: )


Also kurz und bündig: mutt ist in diesem Fall nur Mailclient und (f)cron in diesem Fall nur Scheduler.


Sorry gar nicht nachgedacht:

while true; do ./my_script.sh; sleep 60; done

; anstatt && , falls mal was schief läuft(!) Das Thema darf gern als gelöst betrachtet werden.


Sehr nice das alles:

#!/bin/sh
## Example.
while true; do
        cd /home/ich/dist/ ;
        xvfb-run java -jar TestJar1.jar > ausgabe.txt 2>&1 ;
        rst2pdf ausgabe.txt -o mydocument.pdf ;
        echo "Siehe bitte Anhang." | mutt ich @gmail.com -s "Betreff" -a mydocument.pdf ;
        sleep 3600 ;
done

rst2pdf erstellt schnell, einfach, schön aus einer .txt (mit Code) sehr nice pdfs. Da mutt richtig konfiguriert ist (falls ihr Gmail einstellen möchtet, sagt mir bescheid…) kann ich damit sehr nice pdfs verschicken.

Hab ich noch etwas Wichtiges vergessen? (Es gibt koalaman/shellcheck , sehr praktisch, leider finde ich keine Codeconventions für Shellskripte… (gibt es keine, macht jeder was er will?))

Oder halt einfach Spring Boot nehmen:

Und das halt mit cron-patterns verwenden:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Wobei ich da schon sagen muss, das OS so etwas planen zu lassen ist schon etwas effizienter und eleganter, als durchgehend eine Java Instanz mit Spring Boot laufen zu lassen, die alle zwei Stunden etwas tut. Das fände ich ein bisschen überdimensioniert.

Warum kannst du nicht einfach ein skript erstellen, das das Java-Programm startet und dieses skript alle 2 Stunden von cron ausführen lassen

Wie willst du Emails versenden ohne Mailserver, das geht nicht

Also mit java.mail einen anderen Server nutzen, kleines Programm schreiben und mit cron alle 2h ausführen lassen?