Crontab ändert MAILTO nur für einen bestimmten Job in Roots Crontab

8

Kann ich Folgendes tun, um zu ändern, wo E-Mails für einen bestimmten Crontab-Job in der Crontab-Datei von root abgelegt werden (nicht für einen Do Something-Job an root gesendet, sondern nur an porklover senden):

# Make a hambone appear
* * * * * /scripts/hambone.pl

# Eat Ham
* * * * * /scripts/manga_ham.py

OLDMAILTO=$MAILTO

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=$OLDMAILTO
Gregg Leventhal
quelle

Antworten:

6

In herkömmlichen Cron-Implementierungen ist dies nicht möglich. Variablendefinitionen in einer Crontab sind global, und Cron verwendet für alle Befehle dieselbe E-Mail-Adresse.

Eine Problemumgehung besteht darin, eine lokale Adresse zu verwenden und basierend auf der Eingabe umzuleiten.

Eine andere Methode zum Senden der Ausgabe eines Jobs an eine andere Adresse besteht darin, das Senden manuell durchzuführen. Siehe So leiten Sie die Ausgabe von einem Prozess an einen anderen weiter, führen sie jedoch nur aus, wenn der erste eine Ausgabe hat. für verschiedene Methoden.


Einige moderne Cron-Implementierungen, zumindest die in systemd, analysieren die Crontab anders (danke geedoubleya , jarauh ): Für diesen Job gelten nur Zuweisungen über einer Jobzeile . Wenn Sie also auf einem modernen Linux-System arbeiten, besteht die Möglichkeit, dass Sie dies tun können. Überprüfen Sie die Dokumentation auf Ihrem System ( man 5 crontab).

Sie können immer noch nicht das tun, was Sie in Ihrer Frage vorgeschlagen haben, da cron die rechte Seite der Variablenzuweisungen nicht erweitert. MAILTO=$OLDMAILTOsetzt MAILTOauf einen Wert, der mit einem Dollarzeichen beginnt. Sie müssen die alte Adresse wiederholen.

# Make a hambone appear. Email sent to the user running the crontab.
* * * * * /scripts/hambone.pl

[email protected]
#Do something. Email sent to [email protected]
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=
# Hunt rabbits. Doesn't send email.
* * * * * /scripts/hunt.pl --rabbits

MAILTO=bob
# Eat Ham. Email sent to bob on the local machine.
* * * * * /scripts/manga_ham.py

Beachten Sie auch, dass MAILTO=porklover.cramble.eduE-Mails an das Konto porklover.cramble.eduauf dem lokalen Computer gesendet werden. Das ist wahrscheinlich nicht was du willst.

Gilles 'SO - hör auf böse zu sein'
quelle
In seiner Antwort behauptet Benutzer @geedoubleya, dass es möglich ist, die E-Mail-Adresse zwischen Befehlen zu ändern. Könnte es von der Cronjob-Version abhängen?
Jarauh
1
@ jarauh Danke, es scheint von der Cron-Implementierung abzuhängen. Angesichts der Tatsache, dass die Leute Cron auf alle Arten gepatcht haben, ohne immer die Credits oder die Versionsnummer zu ändern, weiß ich nicht, welche Versionen von Cron dies auf diese Weise tun.
Gilles 'SO - hör auf böse zu sein'
Danke für die Auskunft. Was es noch schlimmer macht, ist, dass es den Leuten auch egal ist, ihre Änderungen in den entsprechenden Manpages zu dokumentieren. Insbesondere ist das Format für die Crontab nicht in allen Details dokumentiert (zB spielt die Reihenfolge der Zeilen eine Rolle).
Jarauh
1

Während das Festlegen solcher Variablen in einem Cron-Eintrag nicht möglich ist, können Sie mit crontab die MAILTOVariable für einen einzelnen Eintrag überschreiben und für nachfolgende Einträge zurücksetzen.

Beispiel:

# Eat Ham
* * * * * /scripts/manga_ham.py

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=root

Wenn die Standardeinstellung MAILTO( /etc/crontabz. B.) geändert wird, muss sie auch in diesem Cron-Eintrag geändert werden.

geedoubleya
quelle