web-dev-qa-db-fra.com

Journal des actions cron sur OS X

Le cron fourni avec OS X enregistre-t-il ses actions n'importe où?

Je ne cherche pas la sortie d'un travail cron particulier, mais plutôt un journal de ce que fait cron. Sur quelques machines Linux que j'ai vérifiées, il y a /var/log/cron qui a un contenu comme:

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)

Cela indique le moment où les tâches ont été exécutées, les utilisateurs qui ont visualisé ou modifié des crontabs, etc. Ces informations ne figurent nulle part ailleurs sur ma machine Snow Leopard.

46
Doug Harris

Je lui ai expliqué comment enregistrer l'activité de mon travail cron sans basculer chacun vers un travail launchd.

La page de manuel cron mentionne les options -x qui permettent "l'écriture d'informations de débogage sur la sortie standard". Un effet secondaire de ceci est que ceux-ci écrivent également des informations de base en erreur standard. Les données envoyées à l'erreur standard sont écrites dans /var/log/system.log.

Cela aboutit à ce que des données comme celle-ci soient écrites dans /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)

Puisque cron lui-même est lancé par launchd, pour l'activer, j'ai dû éditer /System/Library/LaunchDaemons/com.vix.cron.plist pour qu'il ressemble maintenant à:

<?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>

J'ai utilisé -x misc ici, mais peu importe les options que j'ai utilisées. L'ajout du -x a lancé l'enregistrement de l'activité du travail. J'ai également ajouté StandardErrorPath pour écrire dans /var/log/cron.log au lieu du /var/log/system.log par défaut.

Et puis déchargez et rechargez ceci:

$ Sudo launchctl
Password:
launchd% unload /System/Library/LaunchDaemons/com.vix.cron.plist 
launchd% load /System/Library/LaunchDaemons/com.vix.cron.plist 
12
Doug Harris

Il est beaucoup plus facile d'ajouter simplement ce qui suit dans /etc/syslog.conf:

cron.*      /var/log/cron.log

Puis redémarrez syslog

Sudo launchctl unload /System/Library/LaunchDaemons/com.Apple.syslogd.plist
Sudo launchctl load /System/Library/LaunchDaemons/com.Apple.syslogd.plist

Testé et fonctionnant sous OSX 10.7.4

49
phil

OSX a maintenant tendance à utiliser launchd plutôt que cron - doc Apple dev - il est donc possible qu'il n'y ait rien dans cron à consigner.

Utilisez launchctl pour contrôler le niveau de journalisation de launchd. Les informations de journalisation du fichier Som apparaissent dans le fichier system.log, mais davantage dans l'application de la console -> Tous les messages

1
Mark