Melhor registro para cronjobs? Enviar saída cron para syslog?

43

Estou procurando uma maneira melhor de registrar cronjobs. A maioria dos cronjobs costuma enviar spam por email ou console, ser ignorada ou criar outro arquivo de log.

Nesse caso, eu tenho um script Nagios NSCA que envia dados para um servidor central do Nagios. Esse script send_nsca também imprime uma única linha de status em STDOUT, indicando sucesso ou falha.

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk

Isso envia a seguinte mensagem por e-mail para root @ localhost, que é encaminhada para minha equipe de administradores de sistemas. Spam.

nsca_check_disk encaminhado: 1 pacote (s) de dados enviado para o host com sucesso.

Estou procurando um método de log que:

  1. Não envia spam para o email ou o console
  2. Não crie outro arquivo de log krufty que exija limpeza meses ou anos depois.
  3. Capture as informações do log em algum lugar, para que possam ser visualizadas mais tarde, se desejado.
  4. Funciona na maioria dos unixes
  5. Se encaixa em uma infraestrutura de log existente.
  6. Usa convenções de syslog comuns, como 'facilidade' e 'prioridade'
  7. Pode trabalhar com scripts de terceiros que nem sempre fazem log internamente.
Stefan Lasiewski
fonte

Respostas:

69

No processo de escrever esta pergunta, eu respondi a mim mesmo. Então eu vou me responder " estilo Jeopardy ". Isso se expande na resposta fornecida por Dennis Williamson.

O seguinte enviará qualquer saída Cron para /usr/bin/logger(incluindo stderr, que é convertido em stdout usando 2>&1), que enviará para o syslog, com uma 'tag' de nsca_check_disk. O Syslog lida com isso a partir daí. Como esses sistemas (CentOS e FreeBSD) já possuem mecanismos de rotação de log embutidos, não preciso me preocupar com um log como / var/log/mycustom.logencher um disco.

*/5 * * * * root    /usr/local/nagios/sbin/nsca_check_disk 2>&1 | /usr/bin/logger -t nsca_check_disk

/ var / log / messages agora tem uma mensagem adicional que diz o seguinte:

Apr 29, 17:40:00 192.168.6.19 nsca_check_disk: 1 data packet(s) sent to host successfully.

Eu gosto de / usr / bin / logger, porque funciona bem com uma configuração e infraestrutura de syslog existentes e está incluído na maioria das distribuições Unix. A maioria das distribuições * nix já faz rotação de logs e faz bem.

Stefan Lasiewski
fonte
1
O que o comando 2> & 1 faz? O que isso significa? Obrigado.
Brettski
com systemd no Ubuntu 00 00 * * * systemd-cat -t "tagname" /path/to/app.shdepoissudo crontab -u root -e
dashesy
5

Conduza a saída pelo registrador .

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice

Editar: sua atualização parece o caminho certo a seguir.

Dennis Williamson
fonte
Obrigado! Depois de postar minha pergunta, vi que o Apache envia a saída de log para / usr / bin / logger. Eu não sabia que poderíamos canalizar a saída para o logger (1) - não está na página de manual!
Stefan Lasiewski
2
"message - Escreva a mensagem no log; se não for especificado, e o sinalizador -f não for fornecido, a entrada padrão será registrada."
Dennis Williamson
1

Você também pode executar crondcom a opção -s(ou -Sno Busybox) para que a saída seja enviada para syslog.

Stuart Cardall
fonte