404 Not Found


nginx
{"id":9695,"date":"2016-01-19T09:45:30","date_gmt":"2016-01-19T11:45:30","guid":{"rendered":"https:\/\/cleuber.com.br\/?p=9695"},"modified":"2016-01-27T16:53:32","modified_gmt":"2016-01-27T18:53:32","slug":"gerenciando-os-logs-do-cron","status":"publish","type":"post","link":"https:\/\/cleuber.com.br\/index.php\/2016\/01\/19\/gerenciando-os-logs-do-cron","title":{"rendered":"Gerenciando os Logs do Cron"},"content":{"rendered":"

Ol\u00e1 pessoal, aqui uma dica bem r\u00e1pida.<\/p>\n

J\u00e1 expliquei bastante sobre a import\u00e2ncia que o\u00a0Cron tem nos sistemas Unix-like, para agendar tarefas, scripts e comandos<\/a><\/span><\/span>.<\/p>\n

Agora, muitas vezes, precisamos\u00a0saber se um determinado job rodou adequadamente, durante a noite por exemplo. Para isso, precisamos analisar o log.<\/p>\n

Por padr\u00e3o o syslog, (servi\u00e7o do sistema que grava os logs), n\u00e3o salva os logs do cron em um arquivo dedicado.<\/p>\n

Ele salva os logs do cron no arquivo \/var\/log\/syslog, juntamente com outras informa\u00e7\u00f5es do sistema.<\/p>\n

Visualizando\u00a0os Logs do Cron<\/h3>\n

Uma maneira inicial de visualizar e de filtrar os logs do cron contidos no arquivos de log (\/var\/log\/syslog), \u00e9 atrav\u00e9s do comando:<\/p>\n

grep CRON \/var\/log\/syslog
\n<\/code><\/p>\n

Este comando ir\u00e1 mostrar os jobs de todos os usu\u00e1rios.<\/p>\n

Visualizando os Logs de Um Usu\u00e1rio Espec\u00edfico<\/h3>\n

Para mostrar apenas os jobs de um determinado usu\u00e1rio use este comando:<\/p>\n

grep CRON.*\\(usu\u00e1rio\\) \/var\/log\/syslog<\/code><\/pre>\n

Pesquisando Pelo Comando ou Script\u00a0do Job<\/h3>\n

Para saber se um script espec\u00edfico que voc\u00ea agendou no cron, rodou, voc\u00ea pode procurar pelo comando ou script. Digamos que nosso script se chama backup.sh:<\/p>\n

grep \"backup.sh\" \/var\/log\/syslog<\/pre>\n

A sa\u00edda do comando deve ser parecida com\u00a0a abaixo, (e ela colocar\u00e1 cor no palavra-chave que voc\u00ea pesquisou usando o grep), e\u00a0sempre nessa ordem:
\nData \/ Nome da m\u00e1quina \/ Nome do Processo e PID: usu\u00e1rio \/ comando<\/p>\n

Jan 21 08:00:01 MEU_SERVER\u00a0CRON[44553]: (suporte) CMD (\/home\/suporte\/scripts\/backup.sh<\/span>)<\/strong><\/pre>\n

Assim voc\u00ea saber\u00e1 que as 8:00hs do dia 21 de Janeiro o comando\/script “backup.sh” rodou usando o usu\u00e1rio suporte atrav\u00e9s do\u00a0processo do cron no pid 44553.<\/p>\n

Saber Se Um Job do Cron Rodou Em Um Hor\u00e1rio Espec\u00edfico<\/h3>\n

O comando abaixo ir\u00e1 filtrar os jobs do cron que rodaram as 08 horas.<\/p>\n

grep CRON “08:” \/var\/log\/syslog | head -10<\/p>\n

A sa\u00edda dever\u00e1 ser como<\/p>\n

\/var\/log\/syslog:Jan 21 08<\/strong>:00:01 SFL01 CRON[44553]: (usu\u00e1rio tal) CMD (comando tal)
\n\/var\/log\/syslog:Jan 21 08<\/strong>:09:02 SFL01 CRON[47130]: (usu\u00e1rio tal) CMD (comando tal)
\n(…) e assim por diante<\/p>\n

Habilitando\u00a0Os Logs do Cron Tamb\u00e9m No Caminho \/var\/log\/cron<\/h3>\n

Em 2 Passos<\/h3>\n

Passo 1 –<\/strong> Edite o arquivo abaixo com o seguinte comando.<\/p>\n

nano \/etc\/rsyslog.d\/50-default.conf<\/code><\/p>\n

E ent\u00e3o descomente a linha que aparece “#cron*”.
\nObserve abaixo que a linha est\u00e1 comentada (com o s\u00edmbolo # antecedendo as letras)<\/p>\n

\"log1\"<\/p>\n

Observe abaixo que agora, eu j\u00e1 a descomentei.<\/p>\n

\"log2\"<\/a><\/p>\n

Passo 2 –<\/strong> Agora basta reiniciar o rsyslog com o comando:<\/p>\n

sudo service rsyslog restart<\/pre>\n

\"log3\"<\/p>\n

Checando os Logs do Cron No Caminho Habilitado:\u00a0\/var\/log\/cron.<\/h3>\n

Pronto, agora adicionalmente ao syslog, os logs do cron tamb\u00e9m estar\u00e3o registrados no arquivo var\/log\/cron.log<\/p>\n

Para chec\u00e1-los, basta visualizar este aquivo com cat ou com tail, (o tail mostra apenas as \u00faltimas linhas).<\/p>\n

tail \/var\/log\/cron.log<\/pre>\n

Editando\u00a0Uma Tarefa do Cron Para Gravar Seu Log Em Um Outro Local e Arquivo Espec\u00edfico<\/h3>\n

Voc\u00ea pode direcionar a sa\u00edda das tarefas individuais agendadas no cron, aos seus pr\u00f3prios registros para melhorar a legibilidade. Voc\u00ea s\u00f3 precisa especificar um arquivo de\u00a0sa\u00edda, redirecionando-o atrav\u00e9s do uso do s\u00edmbolo “>”. Use o comando “crontab -e” para come\u00e7ar a editar suas tarefas.<\/p>\n

Isso ir\u00e1 reescrever o arquivo de sa\u00edda cada vez.
\nSe voc\u00ea gostaria de acrescentar a sa\u00edda no final do arquivo em vez de uma reescrita completa, use colchete de fechamento duplo “>>”<\/p>\n

 0 15 * * * \/home\/cleuber\/backup-diario.sh >> \/home\/cleuber\/logs\/backup-diario.log 2>&1<\/code><\/pre>\n

Acima vemos um cron que as 15:00hs, diariamente, roda um script chamado “backup-diario.sh” e seu log ser\u00e1 armazenado em \/homer\/cleuber\/logs\/backup.log. (ou seja numa pasta chamada “logs” que criei em minha pasta “Home\/pasta pessoal”.
\n(Para que sejam redirecionadas as sa\u00eddas normais e sa\u00eddas dos erros, ambas para o mesmo arquivo de log especificado, usei os par\u00e2metros “2>&1”).<\/p>\n

Legal n\u00e3o \u00e9?!<\/p>\n

Registrando e Verificando o Tempo de Execu\u00e7\u00e3o de Um Job do Cron<\/h3>\n

Registrando No Job:<\/h4>\n

Se voc\u00ea deseja saber o tempo\u00a0que levou para concluir a execu\u00e7\u00e3o de uma tarefa que rodou.
\nImagine uma tarefa que fa\u00e7a o rsync de pasta entre dois servidores, ou faz a compacta\u00e7\u00e3o de uma pasta com muitos gigabites de dados, e voc\u00ea quer saber quanto tempo a tarefa levou para terminar.<\/p>\n

Ent\u00e3o, para isso funcionar, voc\u00ea pode adicionar o par\u00e2metro “time” antes do comando no cron.<\/p>\n

Exemplo (registrando um arquivo de\u00a0log em outro destino, e registrando a dura\u00e7\u00e3o):<\/p>\n

0 15 * * * time<\/strong> \/home\/cleuber\/backup-diario.sh >> \/home\/cleuber\/logs\/backup-diario.log 2>&1<\/pre>\n

Obs. Lembre-se que o direcionamento da sa\u00edda usando o s\u00edmbolo “>” cria um arquivo de log e sobrescreve-o a cada execu\u00e7\u00e3o do script, j\u00e1 usando dois s\u00edmbolos “>>”, ele ir\u00e1 adicionando as sa\u00eddas ao mesmo arquivo, criando uma lista que vai crescendo a cada execu\u00e7\u00e3o. Lembre-se tamb\u00e9m que o par\u00e2metro no final da linha “2>&1” coloca no arquivo as sa\u00eddas que deram errado e as que deram certo, ok?<\/p>\n

Visualizando o Tempo Decorrido:<\/h4>\n

A sa\u00edda do tempo decorrido vir\u00e1 com dados de user e de system, mas o que a gente quer \u00e9 o “elapsed<\/strong>” (traduzindo – “dura\u00e7\u00e3o”).<\/p>\n

Ent\u00e3o se eu der um comando para visualizar o arquivo de log, ou seja, um cat (que mostra o arquivo todo), ou um tail (e usar o “-6” para mostrar as \u00faltimas 6 linhas), neste caso de exemplo:<\/p>\n

tail -6 \/home\/cleuber\/logs\/backup-diario.log<\/pre>\n

Suponhamos que este script “backup-diario.sh”,\u00a0por exemplo, compacte, usando o tar, dois arquivos (conteudo1.txt e conteudo2.txt) de uma pasta, ent\u00e3o, podemos ver no log a sa\u00edda desta forma:<\/p>\n

tar: Removendo `\/' inicial dos nomes dos membros\r\n\/home\/suporte\/Documentos\/teste\/\r\n\/home\/suporte\/Documentos\/teste\/conteudo.txt\r\n\/home\/suporte\/Documentos\/teste\/conteudo2.txt\r\n1.16user 0.03system 0:01.20elapsed<\/strong> 98%CPU (0avgtext+0avgdata 5600maxresident)k\r\n59840inputs+56496outputs (0major+826minor)pagefaults 0swaps<\/pre>\n

Reparou que na pen\u00faltima linha de sa\u00edda, eu tenho o tempo de dura\u00e7\u00e3o da tarefa (elapsed)?
\nEnt\u00e3o, vemos que levou 1 minuto e 20 segundos.<\/p>\n

Se preferir filtrar apenas o tempo de dura\u00e7\u00e3o:<\/strong><\/p>\n

tail -6 \/home\/cleuber\/logs\/backup-diario.log | grep elapsed<\/pre>\n

A sa\u00edda filtrada ser\u00e1 como esta:<\/p>\n

0.00user 0.00system 0:01.20elapsed<\/strong><\/pre>\n

Obs. Apenas para refor\u00e7ar –\u00a0Usamos o “tail -6” porque pega o final do arquivo e queremos ver a \u00faltima execu\u00e7\u00e3o, mas voc\u00ea poderia usar um “cat”, caso, queira ver todas as dura\u00e7\u00f5es de todas as tarefas que rodaram, ou no caso de estar usando o s\u00edmbolo “>”, (ou inv\u00e9s do “>>”), o que faz ele sobrescrever o arquivo, ent\u00e3o ele n\u00e3o gerar\u00e1 uma lista, e sim apenas o registro da \u00faltima execu\u00e7\u00e3o, ent\u00e3o o cat, pode ser\u00a0usado para mostrar porque vai ter apenas uma linha com o conte\u00fado “elapsed” que queremos. Mas a\u00ed fica ao seu crit\u00e9rio.<\/p>\n

Enviando o Log do Cron Para Um Endere\u00e7o de E-mail<\/h3>\n

Pr\u00e9-requisito<\/strong><\/p>\n

Primeiramente, um requisito \u00e9 ter o pacote do postfix instalado.
\nAo rodar um comando com par\u00e2metro\u00a0para enviar o log para um e-mail, e voc\u00ea n\u00e3o tiver o postfix instalado, o Linux em alguns casos poder\u00e1 te alertar a instalar este pacote primeiro.
\nNo caso do Ubuntu \u00e9 assim. Ent\u00e3o instale-o atrav\u00e9s do comando:<\/p>\n

sudo apt-get install mailutils<\/pre>\n

Ele ir\u00e1 exibir dois passos ou\u00a0telas, a primeira, voc\u00ea poder\u00e1 deixar como “Site Internet” e a segunda o nome do seu dom\u00ednio (pode deixar como est\u00e1 mesmo).<\/p>\n

Feito isso, embora n\u00e3o usaremos este Linux\u00a0como servidor de e-mails, ele j\u00e1 poder\u00e1 encaminhar mensagens de e-mail para\u00a0um endere\u00e7o de e-mail comum como o gmail, hotmail, e etc, voc\u00ea que desejar.<\/p>\n

Para todos os crons da sua conta:<\/h4>\n

Edite o cron, com o comando “crontab -e” e depois adicione a seguinte linha no come\u00e7o do arquivo:<\/p>\n

MAILTO=sua-conta@seu-email.com<\/pre>\n

Para Conta Nenhuma<\/h4>\n

Se quiser que ele n\u00e3o envie e-mail para lugar nenhum, nem para o local (\/var\/mail\/sua-conta) basta deixar vazio.<\/p>\n

MAILTO=\"\"<\/pre>\n

Para Um E-mail Espec\u00edfico apenas em Um Job Espec\u00edfico<\/h4>\n
0 15 * * * time<\/strong> \/home\/cleuber\/backup-diario.sh \u00a0| mail -s<\/span> \"Status do Backup\"<\/span>\u00a0sua-conta@seu-e-mail.com<\/pre>\n

N\u00e3o Criando Logs de Uma Tarefa do Cron<\/h3>\n

Se voc\u00ea deseja que uma tarefa do Cron, n\u00e3o gere nenhum tipo de sa\u00edda de logs, basta deixar o job assim:<\/p>\n

0 15 * * * time<\/strong> \/home\/cleuber\/backup-diario.sh \u00a0> \/dev\/null 2>&1<\/p>\n

Obs. Outros lugares que checamos os logs do cron:<\/h3>\n

\/var\/mail\/seu usu\u00e1rio – aqui pode-se ver tamb\u00e9m o tempo de execu\u00e7\u00e3o
\n\/var\/log\/syslog – aqui vemos os logs de execu\u00e7\u00e3o do cron
\n\/var\/log\/cron –\u00a0aqui vemos os logs de execu\u00e7\u00e3o do cron<\/p>\n

Outros artigos que falam sobre o\u00a0Cron:
\n<\/strong>https:\/\/cleuber.com.br\/index.php\/2014\/06\/24\/agendador-de-tarefas-cron-no-linux<\/a><\/span><\/span>
\n
script-para-backup-compactado-com-tar-e-gz-com-timestamp-agendado-via-cron<\/a><\/span><\/span>
\n
como-usar-o-comando-rsync-para-transferir-dados-para-diretorios-locais-e-remotos<\/a><\/span><\/span><\/p>\n

Abra\u00e7os,<\/p>\n

Cleuber<\/p>\n","protected":false},"excerpt":{"rendered":"

Ol\u00e1 pessoal, aqui uma dica bem r\u00e1pida. J\u00e1 expliquei bastante sobre a import\u00e2ncia que o\u00a0Cron tem nos sistemas Unix-like, para agendar tarefas, scripts e comandos. Agora, muitas vezes, precisamos\u00a0saber se um determinado job rodou adequadamente, durante a noite por exemplo. Para isso, precisamos analisar o log. Por padr\u00e3o o syslog, (servi\u00e7o do sistema que grava …<\/p>\n","protected":false},"author":1,"featured_media":9699,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[51,4,348],"tags":[495,522],"class_list":["post-9695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dicas-e-tutoriais","category-tutoriais-linux","category-servidores-linux","tag-cron","tag-logs"],"_links":{"self":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts\/9695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=9695"}],"version-history":[{"count":0,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts\/9695\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/media\/9699"}],"wp:attachment":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=9695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=9695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=9695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}