Onde está o log cron / crontab?

754

Quero verificar se meu trabalho cron está em execução e a que horas. Acredito que exista um registro para meus sudo crontab -etrabalhos, mas onde?

Pesquisei no google e encontrei recomendações para procurar /var/log(nas quais não vejo nada com 'cron' no nome) e editar o arquivo /etc/syslog.confque também não tenho.

Scott Szretter
fonte

Respostas:

898

Em uma instalação padrão, os trabalhos cron são registrados no

/var/log/syslog

Você pode ver apenas tarefas cron nesse arquivo de log executando

 grep CRON /var/log/syslog

Se você não reconfigurou nada, as entradas estarão lá.

Richard Holloway
fonte
46
Se não houver um MTA instalado, o cron simplesmente joga a saída do trabalho fora.
Barry Kelly
11
O log cron pode estar em outro arquivo no /var/log/diretório Verifique cron.log ou equivalente.
Navigatron
4
isso não me dá resultados do trabalho. apenas fornece uma mensagem genérica de que o cron foi processado.
chovy
2
no AWS era / var / log / cron
tsukimi
5
@shadi você também pode grep -i CRONpesquisar case-insensitive
nafg
236

Você pode criar um arquivo cron.log para conter apenas as entradas CRON que aparecem no syslog. Observe que os trabalhos CRON ainda aparecerão no syslog se você seguir as seguintes instruções.

Abra o arquivo

/etc/rsyslog.d/50-default.conf

Encontre a linha que começa com:

#cron.*

remova o comentário dessa linha, salve o arquivo e reinicie o rsyslog:

sudo service rsyslog restart

Agora você deve ver um arquivo de log cron aqui:

/var/log/cron.log

A atividade do Cron agora será registrada neste arquivo (além do syslog).

Observe que no cron.log você verá entradas para quando o cron executou scripts em /etc/cron.hourly, cron.daily etc. - por exemplo, algo como:

Apr 12 14:17:01 cd CRON[14368]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

No entanto, você não verá mais informações sobre quais scripts foram realmente executados no /etc/cron.daily ou no /etc/cron.hourly, a menos que esses scripts direcionem a saída para o cron.log (ou talvez para outro arquivo de log).

Se você deseja verificar se um crontab está em execução e não precisa procurá-lo no cron.log ou syslog, crie um crontab que redirecione a saída para um arquivo de log de sua escolha - algo como:

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

Isso redirecionará todas as saídas e erros padrão que podem ser produzidos pelo script que é executado no arquivo de log especificado.

user12345
fonte
1
Na minha opinião, esta resposta é melhor no futuro. Portanto, seu arquivo syslog é mais claro.
shgnInc
9
Para excluir também o log cron do syslog, você pode alterar a linha *.*;auth,authpriv.none -/var/log/syslogpara *.*;auth,authpriv.none,cron.none -/var/log/syslog.
Koen.
No nosso CentOS 6, cron. * Definido em /etc/rsyslog.conf, enquanto i está vazio na pasta rsyslog.d.
Scott Chu
o que 2>&1significa?
John Joe
2
@JohnJoe 2> & 1 é usado para encaminhar o stderr para o stdout, assim você também receberá o stderr no arquivo de log.
Sampo Sarrala
79

Às vezes, pode ser útil monitorá-lo continuamente, nesse caso:

tail -f /var/log/syslog | grep CRON
KennyCason
fonte
10
Bem, você provavelmente deseja usar -F, o que seguirá o arquivo através das alterações de nome, para que, quando ele for truncado / movido para, por exemplo /var/log/syslog.1.gz, você ainda esteja seguindo o /var/log/syslogarquivo atual . Per o homem docs, este é o mesmo que corrertail xxxx -f --retry
Momer
37

Você também pode direcionar a saída dos cronjobs individuais para seus próprios logs para melhor legibilidade, basta anexar a saída da data em algum lugar.

 0 15 * * *    /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
Andrew Meyer
fonte
4
true, mas se essa linha não funcionar devido a um erro de sintaxe, nada será gravado no log de saída especificado.
Raptor
11
Você pode resolver isso anexando 2> & 1 depois que o arquivo de log for especificado. Também é uma prática recomendada testar seus cronjobs antes de adicioná-los ao crontab e, em seguida, estar presente na primeira execução agendada para garantir que o crontab esteja formatado corretamente.
Andrew Meyer
10

Se você systemdinstalou em seu sistema, poderá exibir o log de tarefas cron usando o journalctlcomando

Por exemplo, no meu Ubuntu 17.10:

journalctl -u cron.service
an9wer
fonte
9

Essa é uma pergunta muito antiga, mas nenhuma dessas respostas parece satisfatória.

Primeiro, faça seu trabalho do cron ser executado a cada minuto e, em seguida, execute o cron como não-daemon (temporariamente, basta matar qualquer crond que já tenha sido iniciado) com o log de teste:

crond -nx test

E veja o log da execução do seu programa fluindo através do seu terminal.

Tristan Maat
fonte
7
Não roda em 14.04 -No command 'crond' found, did you mean: Command 'cron' from package 'cron' (main)
G-.
8

É /var/log/syslogpor padrão.

Mas pode ser configurado para criar um cron.log separado, o que é mais útil.

Estas perguntas e respostas descrevem o processo:

16.04: Como faço para o cron criar o cron.log e monitorá-lo em tempo real?

Também nesta resposta estão as instruções para criar um wcroncomando que o exibe quase em tempo real. Além disso, ele vincula a outra resposta,

Como alterar o nível do log do cron?

que mostra como alterar o nível de log para incluir mais do que apenas o início dos trabalhos - o nível 15 também mostrará erros e a hora de término.

SDsolar
fonte
5

Fedoar 29 e RHEL 7

journalctl -t CROND

Do journalctlmanual:

   -t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER, or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

       This parameter can be specified multiple times.
HarlemSquirrel
fonte
3

Você pode redirecionar a saída do cron para um arquivo tmp

Tais como: 00 11 07 * * / bin / bash /home/ubuntu/command.sh> / tmp / output 2> & 1

Erro e saída normal, ambos serão redirecionados para o mesmo arquivo

Himanshu
fonte
2

Como mencionado anteriormente, os trabalhos cron são registrados no /var/log/syslog

Você pode canalizar o syslog para grep e filtrar os logs CRON, como este

less /var/log/syslog | grep CRON 

Você pode pesquisar seus logs do crontab, como este

less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>

Você pode pesquisar nos registros do histórico do crontab armazenados em arquivos gz, como este

less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>

É sempre bom ter um mecanismo de registro; você pode configurar rapidamente o ELK para seus servidores; também pode experimentar o logz .

zero
fonte