Protokoll der Cron-Aktionen unter OS X

46

Protokolliert der mit OS X gelieferte Cron seine Aktionen irgendwo?

Ich suche nicht die Ausgabe eines bestimmten Cron-Jobs, sondern protokolliere, was Cron tut. Auf einigen Linux-Rechnern, die ich überprüft habe, gibt /var/log/crones Inhalte wie:

Apr 26 11:00:01 localhost crond[27755]: (root) CMD (/root/bin/mysql-backup)
Apr 26 11:01:01 localhost crond[27892]: (root) CMD (run-parts /etc/cron.hourly)
Apr 26 11:07:01 localhost crond[28138]: (root) CMD (/usr/local/bin/python /home/
user1/scripts/pythonscript.py)
Apr 26 11:18:18 localhost crontab[28921]: (user2) LIST (user2)
Apr 26 11:18:22 localhost crontab[28929]: (user2) BEGIN EDIT (user2)
Apr 26 11:18:59 localhost crontab[28929]: (user2) REPLACE (user2)

Dies zeigt, wann Jobs ausgeführt wurden, wann Benutzer Crontabs angesehen oder bearbeitet haben usw. Dieses Zeug ist nirgends auf meinem Snow Leopard-Computer zu finden.

Doug Harris
quelle

Antworten:

49

Es ist viel einfacher, einfach Folgendes zu /etc/syslog.conf hinzuzufügen:

cron.*      /var/log/cron.log

Starten Sie dann syslog neu

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist

Getestet und lauffähig unter OSX 10.7.4

phil
quelle
Wow, viel einfacher. Habe eine Gegenstimme. Ich frage mich, ob das bei Snow Leopard funktioniert hätte.
Doug Harris
2
Works on Mavericks
Clustermagnet
1
Arbeitet an Yosemite
nickcoxdotme
Works on Snow Leopard, 10.6.8 (ja, ich bin eine Antiquität ...)
Daniel Griscom
2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: Vorgang nicht zulässig, während der Systemintegritätsschutz aktiviert ist (10.13.2 High Sierra). Muss ich SIP deaktivieren? Vielen Dank!
Shane Lu
12

Ich dachte mir, wie ich meine Cron-Job-Aktivitäten protokollieren kann, ohne jeden einzelnen auf gestartete Jobs umzustellen.

Die Cron-Manpage erwähnt -xOptionen, die das "Schreiben von Debugging-Informationen in die Standardausgabe" ermöglichen. Ein Nebeneffekt davon ist, dass diese auch grundlegende Informationen zu Standardfehlern schreiben. An Standardfehler gesendete Daten werden in geschrieben /var/log/system.log.

Dies führt dazu, dass Daten wie diese geschrieben werden in /var/log/system.log:

debug flags enabled: misc
[42073] cron started
log_it: (user1 42084) CMD (/root/bin/mysql-backup)
log_it: (user1 42094) CMD (run-parts /etc/cron.hourly)

Da cron selbst von launchd gestartet wird, musste ich das bearbeiten, /System/Library/LaunchDaemons/com.vix.cron.plistdamit es jetzt so aussieht:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.vix.cron</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/cron</string>
        <string>-x</string>
        <string>misc</string>
    </array>
    <key>KeepAlive</key>
    <dict>
        <key>PathState</key>
        <dict>
            <key>/etc/crontab</key>
            <true/>
        </dict>
    </dict>
    <key>QueueDirectories</key>
    <array>
        <string>/usr/lib/cron/tabs</string>
    </array>
    <key>EnableTransactions</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/var/log/cron.log</string>
</dict>
</plist>

Ich habe -x mischier verwendet, aber es schien keine Rolle zu spielen, welche Optionen ich verwendet habe. Durch das Hinzufügen wurde die -xProtokollierung der Jobaktivität gestartet. Ich habe auch den StandardErrorPath hinzugefügt, in den /var/log/cron.loganstelle des Standard geschrieben werden soll /var/log/system.log.

Und dann entladen und neu laden:

$ sudo launchctl
Password:
launchd% unload /System/Library/LaunchDaemons/com.vix.cron.plist 
launchd% load /System/Library/LaunchDaemons/com.vix.cron.plist 
Doug Harris
quelle
1

OSX verwendet jetzt eher launchd als cron ( Apple dev doc ), sodass möglicherweise nichts in cron zu protokollieren ist.

Verwenden Sie launchctl, um die Protokollierungsstufe von launchd zu steuern. Som-Protokollinformationen werden in system.log angezeigt, mehr jedoch in der Konsolen-App -> Alle Nachrichten

user151019
quelle
5
Hmmm, ich könnte überlegen, auf launchd umzusteigen, aber ich bin ein mürrischer alter Unix-Benutzer. Ich bin diesem Link gefolgt. Das Beispiel auf dieser Seite ist 1046 Byte lang, um 24 Zeichen von crontab zu ersetzen 0 0 7 11 0 happybirthday.
Doug Harris
-1

Zumindest unter Yosemite werden Cron-Protokolle als mailNachrichten ausgegeben. Verwenden Sie also die mail, um sie zu lesen.

mcandre
quelle
cronSendet eine (ansonsten nicht umgeleitete) Ausgabe per E-Mail an den Eigner des Auftrags. Wenn alle Ausgaben umgeleitet werden, wird keine E-Mail gesendet. (Selbst wenn eine Nachricht gesendet wird, bin ich mir nicht sicher, ob der ausgeführte Befehl angezeigt wird.) Die Frage lautet, wie der Administrator alle ausgeführten Befehle sehen kann cron. Um Ihre Antwort zu verwenden, müsste sich eine Person die Mail-Datei aller Personen ansehen.
G-Man sagt, dass Monica am