Registro de acciones cron en OS X

46

¿El cron que viene con OS X registra sus acciones en cualquier lugar?

No estoy buscando resultados de ningún trabajo cron en particular, sino un registro de lo que está haciendo cron. En un par de máquinas Linux que he comprobado, hay /var/log/croncontenidos como:

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)

Esto muestra cuándo se ejecutaron los trabajos, cuándo los usuarios vieron o editaron crontabs, etc. Esto no está en ninguna parte que haya encontrado en mi máquina Snow Leopard.

Doug Harris
fuente

Respuestas:

49

Mucho más fácil simplemente agregar lo siguiente a /etc/syslog.conf:

cron.*      /var/log/cron.log

Luego reinicie syslog

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

Probado y trabajando en OSX 10.7.4

phil
fuente
Guau, mucho más simple. Tener un voto a favor. Me pregunto si esto habría funcionado en Snow Leopard.
Doug Harris
2
Funciona en Mavericks
Clustermagnet
1
Funciona en Yosemite
nickcoxdotme
Funciona en Snow Leopard, 10.6.8 (sí, soy una antigüedad ...)
Daniel Griscom
2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: Operación no permitida mientras la Protección de integridad del sistema está activada (10.13.2 High Sierra). ¿Tengo que deshabilitar SIP? ¡Gracias!
Shane Lu
12

Me di cuenta de cómo registrar mi actividad de trabajo cron sin cambiar cada uno a trabajos iniciados.

La página de manual de cron menciona -xopciones que permiten "escribir información de depuración en la salida estándar". Un efecto secundario de esto es que estos también escriben información básica al error estándar. Los datos enviados al error estándar se escriben en /var/log/system.log.

Esto da como resultado que se escriban datos como este en /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)

Dado que cron se inicia por launchd, para habilitar esto, tuve que editar /System/Library/LaunchDaemons/com.vix.cron.plistpara que ahora se vea así:

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

Usé -x miscaquí, pero no parecía importar las opciones que usé. Agregar el -xinicio del registro de la actividad laboral. También agregué el StandardErrorPath para escribir en /var/log/cron.loglugar del predeterminado /var/log/system.log.

Y luego descargue y vuelva a cargar esto:

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

OSX ahora tiende a usar launchd en lugar de cron ( documento de desarrollo de Apple) , por lo que es posible que no haya nada en cron para registrar.

Use launchctl para controlar el nivel de registro de launchd. La información de registro de Som aparece en system.log pero más en la aplicación de consola -> Todos los mensajes

usuario151019
fuente
55
Hmmm, cambiar a launchd es algo que podría considerar, pero soy un viejo usuario gruñón de Unix. Seguí ese enlace. El ejemplo en esa página tiene 1046 bytes de largo para reemplazar 24 caracteres de crontab 0 0 7 11 0 happybirthday.
Doug Harris
-1

Al menos en Yosemite, los registros cron salen como mailmensajes, así que usa el mailpara leerlos.

mcandre
fuente
cronenvía (por lo demás no redirigido) la salida al propietario del trabajo por correo. Si toda la salida se redirige, no se envía ningún correo. (Incluso si se envía un mensaje, no estoy seguro de si muestra el comando que se ejecutó). La pregunta es cómo el administrador puede ver todos los comandos que se cronhan ejecutado. Para usar su respuesta, una persona tendría que mirar el archivo de correo de todos.
G-Man dice 'Restablecer a Mónica' el