Onde está o arquivo de log cron no MacOSX Lion?

25

Quero solucionar um trabalho cron que funcionou bem até uma modificação recente, mas não consigo encontrar o arquivo de log cron, onde está?

Todos
fonte
2
É realmente um trabalho cron ou você está usando o launchd. O Cron foi descontinuado no OS X.
jaberg 31/01
1
Você definiu um arquivo de log para o trabalho cron?
precisa saber é o seguinte
na verdade, é um crontrabalho que eu configurei cron -ee posso vê-lo, cron -le tenho certeza de que funcionou no Lion e, antes disso, no Snow leopard por um longo tempo.
Ali
e não, não defino manualmente um arquivo de log para o 'cron', apesar de gravar em um arquivo de log dentro do trabalho e ele parou de funcionar recentemente depois de alterar alguma coisa.
Ali
2
Ali, como você tem a resposta, poste-a como resposta e aceite-a. Não o edite na pergunta. Você não apenas pode, mas é incentivado, a responder sua própria pergunta.
Jason Salaz

Respostas:

30

Por padrão, o cron não registra a saída dos trabalhos executados. É possível registrar o fato de que os cronjobs foram executados, mas esse também não é o padrão no OS X.

Para investigar a saída da execução do cronjob, sugiro modificar sua linha do cronjob para redirecionar STDOUT e STDERR para arquivos de log. No seu arquivo crontab ou após a execução crontab -e, não importa o que você faça, adicione algo como o seguinte à sua linha de trabalho:

0 0 * * * yourcommand >/tmp/stdout.log 2>/tmp/stderr.log

Isso deve enviar STDOUT (saída normalmente impressa ou com eco para STDOUT) para um arquivo de texto chamado stdout.log no diretório / tmp e STDERR para stderr.log no diretório temp. Muitos utilitários usam o STDERR para imprimir mensagens de erro especiais quando são erros de aplicativos, e não erros gerados pela execução real do programa. (Você pode ler mais sobre STDERR na Wikipedia.)

Jason Salaz
fonte
Obrigado, é exatamente isso que tenho tentado fazer, parece que, cronpor algum motivo, não consegue executar o trabalho em primeiro lugar. se eu mesmo executar o trabalho digitando o comando no terminal em que ele é executado e crongerar o arquivo de log, mas se eu aguardar a execução, nada acontecerá, pelo menos nenhuma alteração no arquivo de log, pensei em talvez um "arquivo de log cron "ou havia algum vestígio no console que poderia me ajudar a descobrir o que está acontecendo, recentemente mudei meu shell do bash para o zsh, mas acho que isso não poderia ter afetado isso.
Ali
1
De acordo com erikslab.com/2011/02/04/logging-with-launchd , você pode modificar o cron plist ( /System/Library/LaunchDaemons/com.vix.cron.plist) com um caminho Stdout / Stderr para depurar o próprio cron. Não me lembro se launchctl unloading e launchctl loading o plist são suficientes ou, já que é um daemon do sistema, se você precisar reiniciar completamente. Eu sugiro o último apenas para ter certeza.
Jason Salaz
20

Muito mais fácil simplesmente adicionar o seguinte a /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

Fraidoon Sarwary
fonte
3
Eu gosto dessa idéia - mas na versão 10.10.5, /etc/syslog.confdiz o meu # Note that flat file logs are now configured in /etc/asl.conf. Esse arquivo tem uma sintaxe diferente, não está claro para mim como configurar o logon nele.
Ken Williams
@KenWilliams, mesmo que seja o que diz, syslog.conf ainda funciona, em High Sierra.
Fish Monitor
14

Por padrão, "log" não está ativado. Mas você pode obter algumas informações úteis executando o mailcomando

TL; DR no mailcomando: pressione enter para ler as mensagens e, em seguida, qpressione enter para sair.

William Entriken
fonte
4
Muito bem obrigado. A minha me mostrou que havia um comando não reconhecido com meu Cron. Felicidades!
21716 Joshua Pinter
6

Consegui encontrar o log do cron-job,

/var/mail/{user-name}

A seguir, é apresentado um log de tarefa agendada para executar um comando da AWS CLI,

From [email protected]  Fri Mar  2 10:00:00 2018
Return-Path: <[email protected]>
X-Original-To: build
Delivered-To: [email protected]
Received: by BuildServer1.local (Postfix, from userid 501)
    id A7A94296CBA3; Fri,  2 Mar 2018 10:00:00 +0100 (CET)
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <build@BuildServer1> /app/scripts/s3-sync.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=build>
X-Cron-Env: <USER=build>
X-Cron-Env: <HOME=/Users/build>
Message-Id: <[email protected]>
Date: Fri,  2 Mar 2018 10:00:00 +0100 (CET)

upload: ../../app/logs/debug.log to s3://**my-s3***/app/logs/debug.log
Vineeth
fonte
1
Esse é um email de erro armazenado na caixa de correio deuser
nohillside
@patrix, eu também consegui encontrar um trabalho cron de sucesso. Atualizado a resposta.
Vineeth
Agradável! Deve ser a resposta aceita!
Trollhorn 04/07
3

Acabou quando cron está executando o trabalho (como eu), /usr/local/binnão está no PATH.
Encontrei isso por tentativa e erro e desenvolvendo o trabalho do zero a partir de coisas simples que eu sabia que funcionariam e gradualmente adicionei coisas até encontrar o problema.

Sobre as outras sugestões e respostas:
Por alguma razão (pelo menos na minha máquina, que está executando um Lion atualizado a partir do SnowLeopard) cronnão usa os parâmetros especificados nos arquivos plist que launchddevem ler /System/Library/LaunchDaemons/com.vix.cron.plistou talvez o cron no Lion não escreva nada para stdout ou stderr.

A propósito, estou usando http://s3tools.org/s3cmd em syncuma pasta com um bucket do Amazon S3 como backup (como um DropBox primitivo).

Todos
fonte