Quero saber como posso ver exatamente o que os trabalhos cron estão fazendo em cada execução. Onde estão localizados os arquivos de log? Ou posso enviar a saída para o meu email? Eu configurei o endereço de email para enviar o log quando o trabalho cron for executado, mas ainda não recebi nada.
218
Respostas:
registrará toda a saída do trabalho cron em /var/log/myjob.log
Você pode usar
mail
para enviar e-mails. A maioria dos sistemas enviarácron
a saída do trabalho não tratado por email para o root ou o usuário correspondente.fonte
2>&1
: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21stderr
estdout
no log,2>&1
isso deve ocorrer após o indireção:myjob.sh >> /var/log/myjob.log 2>&1
YYYY-MM-DD_hh-mm-sec
no nome do arquivo de saída, para que cada nome de arquivo seja diferente e mantido sem reescrever?date +\%Y\%m\%d\%H\%M\%S
-cron.log 2> & 1Por padrão, o cron registra em / var / log / syslog para que você possa ver as entradas relacionadas ao cron usando:
/ubuntu/56683/where-is-the-cron-crontab-log
fonte
journalctl | grep cron
em sistemas systemd/var/log/cron
no AWS Linux AMI.sudo journalctl -u cron
cron
está sendo registrado é muito dependente do sistema. Há uma resposta separada com detalhes sobre como vários destinos de log são configurados nos sistemas Linux (ou mais corretamente, nos sistemas que usamsyslog
). Outros sistemas podem ter uma maneira diferente de configurar essas coisas.Aqui está o meu código:
fonte
>>
acrescenta e2>&1
diz para enviar erro padrão para o mesmo local da saída padrão.Existem pelo menos três tipos diferentes de log:
O log ANTES do programa é executado, que registra apenas se o cronjob TENTAR executar o comando. Esse está localizado em / var / log / syslog, como já mencionado por @Matthew Lock.
O registro de erros APÓS o programa tentar executar, que pode ser enviado para um email ou arquivo, conforme mencionado pelo @Spliffster. Prefiro fazer logon em um arquivo, porque, com o email THEN, você tem uma NOVA fonte de problemas e verifica se o envio e a recepção de emails estão funcionando perfeitamente. Às vezes é, às vezes não é. Por exemplo, em uma máquina comum simples na qual você não está interessado em configurar um smtp, às vezes você prefere fazer logon em um arquivo:
Existem algumas fontes comuns de problemas com cronjobs: * O CAMINHO ABSOLUTO do binário a ser executado. Quando você o executa no seu shell, pode funcionar, mas o processo cron parece usar outro ambiente e, portanto, nem sempre encontra binários se você não usar o caminho absoluto. * As BIBLIOTECAS usadas por um binário. É mais ou menos o mesmo ponto anterior, mas certifique-se de que, se simplesmente colocar o NAME do comando, estiver se referindo exatamente ao binário que usa a mesma biblioteca, ou melhor, verifique se o binário que você está se referindo com o caminho absoluto é o mesmo que você se refere quando usa o console diretamente. Os binários podem ser encontrados usando o comando localizar, por exemplo:
Certifique-se de que o binário que você irá referenciar seja o mesmo que você está chamando no seu shell, ou simplesmente teste novamente no seu shell usando o caminho absoluto que você planeja colocar no cronjob.
fonte
No Ubuntu, você pode ativar um
cron.log
arquivo para conter apenas as entradas CRON.Remova o comentário da linha que menciona
cron
no/etc/rsyslog.d/50-default.conf
arquivo:Salve e feche o arquivo e reinicie o
rsyslog
serviço:Agora você pode ver as entradas do log cron em seu próprio arquivo:
Saídas de amostra:
No entanto, você não verá mais informações sobre quais scripts foram realmente executados dentro
/etc/cron.daily
ou/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
cron.log
ousyslog
crie um crontab que redirecione a saída para um arquivo de log de sua escolha - algo como:Etapas realizadas em: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
fonte
cron
já envia a saída padrão e o erro padrão de cada trabalho executado por correio para o proprietário do trabalho cron.Você pode usar
MAILTO=recipient
nocrontab
arquivo para enviar os emails para uma conta diferente.Para que isso funcione, você precisa ter o correio funcionando corretamente. Entregar em uma caixa de correio local geralmente não é um problema (de fato, as chances são
ls -l "$MAIL"
que você já esteja recebendo alguns), mas para tirá-lo da caixa e colocá-lo na Internet é necessário o MTA (Postfix, Sendmail, o que você tem) para esteja configurado corretamente para conectar-se ao mundo.Se não houver saída, nenhum email será gerado.
Uma organização comum é redirecionar a saída para um arquivo. Nesse caso, é claro que o daemon cron não verá o trabalho retornar nenhuma saída. Uma variante é redirecionar a saída padrão para um arquivo (ou gravar o script para que ele nunca imprima nada - talvez armazene resultados em um banco de dados ou execute tarefas de manutenção que simplesmente não produzem nada?) E receba um email apenas se houver é uma mensagem de erro.
Para redirecionar os dois fluxos de saída, a sintaxe é
Observe como anexamos (duplo
>>
) em vez de substituir, para que a saída de qualquer trabalho anterior não seja substituída pela próxima.Conforme sugerido em muitas respostas aqui, você pode enviar os dois fluxos de saída para um único arquivo; substitua o segundo redirecionamento por
2>&1
"erro padrão deve ir para onde a saída padrão estiver indo". (Mas eu particularmente não apoio essa prática. Principalmente faz sentido se você realmente não espera nada na saída padrão, mas pode ter esquecido alguma coisa, talvez proveniente de uma ferramenta externa chamada no seu script.)cron
trabalhos são executados no diretório inicial, portanto, qualquer nome de arquivo relativo deve ser relativo a isso. Se você deseja gravar fora do diretório inicial, obviamente precisará separadamente garantir que tenha acesso de gravação ao arquivo de destino.Um antipadrão comum é redirecionar tudo para
/dev/null
(e depois pedir ao Stack Overflow para ajudá-lo a descobrir o que deu errado quando algo não está funcionando; mas também não podemos ver a saída perdida!)No script, mantenha a saída regular (resultados reais, de preferência em formato legível por máquina) e os diagnósticos (geralmente formatados para um leitor humano) separados. Em um script de shell,
Algumas plataformas (e, por exemplo, o GNU Awk) permitem que você use o nome do arquivo
/dev/stderr
para mensagens de erro, mas isso não é adequadamente portátil; em Perlwarn
edie
imprima com erro padrão; em Python, escreva parasys.stderr
ou uselogging
; em Ruby, tente$stderr.puts
. Observe também como as mensagens de erro devem incluir o nome do script que produziu a mensagem de diagnóstico.fonte
Caso você esteja executando algum comando com o sudo, ele não permitirá. Sudo precisa de um tty.
fonte
sudo
configuração. Coisas que precisam ser executadas sem uma maneira de fornecer uma senha devem ser configuradasNOPASSWD:
na suasudoers
configuração.Ao especificar um email válido, você receberá a saída do trabalho cron que é executado. Assim, você poderá verificá-lo e garantir que tudo foi executado corretamente. Observe que você não receberá um email se não houver saída do comando cron job.
Lembre-se de que você receberá um email para cada um dos trabalhos cron executados. Isso pode inundar sua caixa de entrada caso seus crons sejam executados com muita frequência
fonte