Log de ações cron no OS X


46

O cron que acompanha o OS X registra suas ações em algum lugar?

Não estou procurando a saída de nenhum trabalho cron específico, mas o log do que o cron está fazendo. Em algumas máquinas Linux que verifiquei, existe um /var/log/cronconteúdo 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)

Isso mostra quando os trabalhos foram executados, quando os usuários visualizaram ou editaram os crontabs etc. Esse material não foi encontrado em nenhum lugar na minha máquina Snow Leopard.

Respostas:


49

Muito mais fácil simplesmente adicionar o seguinte ao /etc/syslog.conf:

cron.*      /var/log/cron.log

Em seguida, reinicie o syslog

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

Testado e funcionando no OSX 10.7.4


Uau, muito mais simples. Tenha um voto positivo. Gostaria de saber se isso teria funcionado no Snow Leopard.
Doug Harris

2
Funciona no Mavericks
Clustermagnet 8/14

1
Funciona em Yosemite
nickcoxdotme

Obras sobre Snow Leopard, 10.6.8 (sim, eu sou uma antiguidade ...)
Daniel Griscom

2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: Operação não permitida enquanto o System Integrity Protection está ativado (10.13.2 High Sierra). Tenho que desativar o SIP? Obrigado!
Shane Lu

12

Imaginei como registrar minha atividade de trabalho cron sem mudar cada um deles para os trabalhos launchd.

A página de manual do cron menciona -xopções que permitem "gravar informações de depuração na saída padrão". Um efeito colateral disso é que eles também gravam informações básicas em erros padrão. Os dados enviados para o erro padrão são gravados /var/log/system.log.

Isso resulta em dados como este sendo gravados em /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)

Como o próprio cron é lançado pelo launchd, para ativar isso, eu tive que editar /System/Library/LaunchDaemons/com.vix.cron.plistpara que agora se pareça com:

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

Eu usei -x miscaqui, mas não parecia importar quais opções eu usei. Adicionando o -xinício do log da atividade do trabalho. Também adicionei o StandardErrorPath para gravar em /var/log/cron.logvez do padrão /var/log/system.log.

E, em seguida, descarregue e recarregue isso:

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

1

O OSX agora tende a usar o launchd em vez do cron - Apple dev doc -, portanto, pode haver que não haja nada no cron para registrar.

Use launchctl para controlar o nível de log do launchd. As informações do registro de som aparecem em system.log, mas mais no aplicativo de console -> Todas as mensagens


5
Hmmm, mudar para o launchd é algo que eu poderia considerar, mas sou um velho usuário mal-humorado do unix. Eu segui esse link. O exemplo nessa página tem 1046 bytes para substituir 24 caracteres do crontab 0 0 7 11 0 happybirthday.
Doug Harris

-1

Pelo menos no Yosemite, o cron registra a saída como mailmensagens, então use o mailpara lê-las.


cronenvia a saída (caso contrário não redirecionada) para o proprietário do trabalho por email. Se toda a saída for redirecionada, nenhum email será enviado. (Mesmo que uma mensagem seja enviada, não tenho certeza se mostra o comando que foi executado.) A questão é perguntar como o administrador pode ver todos os comandos cronexecutados. Para usar sua resposta, uma pessoa precisaria examinar o arquivo de mensagens de todos.
G-Man Diz 'Reinstate Monica'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.