Überprüfen Sie, ob die Programme, die Sie mit cron ausführen, eigene Protokolldateien haben. Wenn sie dies nicht tun, aber ihre Ausgabe in die Standardausgaben schreiben, können Sie diese in Dateien umleiten oder sie Ihnen per E-Mail zusenden. Innerhalb von crontabs funktioniert die Standard-Shell-Umleitung.
Z.B. um die Fehlerausgabe von some_job.sh
umzuleiten bis some_job.err
und Verwerfen der Standardausgabe (d. h. Senden an /dev/null
) fügen Sie Ihrer Crontab die folgende Umleitung hinzu
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
oder um es Ihnen stattdessen per Post zuzusenden (falls mail
verfügbar)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
Die meisten Cron-Daemons auf Plattformen, mit denen ich gearbeitet habe, senden die stdout/stderr von Benutzer-Cron-Jobs automatisch per E-Mail an den Benutzer, von dessen Crontab der Job stammt. Ich habe vergessen, was systemweit passiert (nicht benutzerspezifische Cron-Jobs aus /etc/crontab). Die Sache ist die, dass die Leute auf den meisten Unix-ähnlichen Betriebssystemen nicht mehr immer einen Mailer-Daemon (das heißt einen Mail Transfer Agent (MTA) wie sendmail, qmail oder postfix) einrichten. Also sterben die Cron-Job-Ausgabe-E-Mails einfach irgendwo in einem lokalen Mail-Spool-Ordner, wenn sie überhaupt das bekommen weit. Eine Antwort könnte also sein, Ihren Mailer-Daemon zu starten und vielleicht sicherzustellen, dass Sie eine ~/.forward-Datei haben, um Ihre lokale Mail an Ihr "echtes" E-Mail-Konto weiterzuleiten.
Wenn Sie möchten, dass Ihre Jobs in bestimmte Protokolldateien schreiben, können Sie die Standardausgabeumleitung verwenden, wie @honk vorgeschlagen, oder, angenommen, Ihr Cron-Job ist ein Shell-Skript, Sie könnten Ihr Skript logger(1) oder syslog(1) oder aufrufen lassen jedes andere Befehlszeilentool, das Ihr Betriebssystem zum Senden beliebiger Nachrichten an Syslog bereitstellt. Dann könnten Sie die eingebauten Methoden Ihres Betriebssystems verwenden, um zu konfigurieren, welche Arten von Nachrichten wo protokolliert werden, vielleicht durch Bearbeiten von /etc/syslog.conf.
Die meisten meiner Cron-Jobs rufen Bash-Skripte auf, die ich speziell für den Zweck geschrieben habe, aus einem bestimmten Grund von Cron gestartet zu werden. In diesen, insbesondere wenn ich sie anfänglich schreibe und debugge, verwende ich gerne bashs "set -vx", um die nicht erweiterte und erweiterte Form jeder Zeile des Shell-Skripts in stdout zu schreiben, bevor es ausgeführt wird. Beachten Sie, dass Shell-Skripte, die von cron gestartet werden, als nicht anmeldende, nicht interaktive Shells betrachtet werden, sodass Ihre standardmäßigen Shell-Startskripts wie .bashrc und .profile nicht ausgeführt werden. Wenn Sie bash verwenden und möchten, dass bash ein Startskript ausführt, müssen Sie in Ihrer Crontab vor der Zeile, in der Sie den Job definieren, eine Umgebungsvariable "BASH_ENV=/path/to/my/startup/script" definieren.
Die Tasks, die Cron ausführt, sind für ihre eigene Protokollierung verantwortlich.