Existe algum log estendido disponível para tarefas agendadas?

5

Eu tenho 3 scripts em /etc/cron.daily . Meus logs do cron são escritos em /var/log/cron . O abaixo é uma entrada para o cron acima que foi executado.

(root) CMD (run-parts /etc/cron.hourly)

Aqui o stdout ou stderr dos scripts dentro do cron não está disponível, mostra que o comando run-parts foi executado nesta pasta.

Existe algum truque que possa ajudar a registrar o que aconteceu enquanto os 3 scripts foram executados?

NOTA: Não consigo editar os scripts em cron.daily para redirecionar as saídas e erra para um arquivo de log.

    
por Shankar Menon 28.03.2014 / 13:52

3 respostas

3

No Unix, o sistema de correio é o meio pelo qual as notificações do sistema são entregues aos usuários. Você pode pensar nisso como uma espécie de como no Windows, onde algo vai aparecer na sua barra de tarefas com uma mensagem pop-up se precisar notificá-lo de algo. Desde cronjobs (teoricamente) não deve produzir qualquer saída (desde que ninguém deveria estar lá para vê-lo) qualquer saída (stdout ou stderr) é tratada como se fosse uma possível indicação de um erro ou problema e assim um e-mail é enviado para o proprietário do cronjob para solicitar que eles façam check-out.

Assim, toda a saída (stdout e stderr) é enviada através do sistema de correio local para o proprietário do cronjob. Se o proprietário for uma conta não pessoal, você poderá direcionar o MTA local para retransmitir para uma conta de e-mail real configurando um alias. Por exemplo, adicionei a /etc/aliases :

root: [email protected]

Em seguida, executei o comando newaliases (para reconstruir o banco de dados de aliases de email). Depois disso, comecei a receber os e-mails do root na caixa de entrada do meu e-mail corporativo:

root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only

Então essa é a maneira mais ou menos normal (deixar o sistema enviar e-mails de notificação). Existem outros meios para lidar com a notificação. Algumas alternativas:

Modificando aliases para salvar os e-mails em um arquivo específico:

root: /var/log/rootMails

Pipetando o email para um script:

root: |/usr/local/bin/filterMail

Uma alternativa para mexer com aliases é usar a opção MAILTO= dentro do crontab do usuário que muitos daemons do cron suportam. Isso pode ser preferível se você quiser receber apenas um conjunto específico de notificações do usuário, e não qualquer coisa que seja descartada em sua caixa de correio (que é o que aliases realiza).

Tenho certeza de que há muitos outros, mas você provavelmente quer fazer o primeiro ou o último.

    
por 28.03.2014 / 14:18
3

Você pode executar o cron com a opção -s para usar o syslog em vez de enviar e-mails. Isso funciona pelo menos no RHEL e seus derivados, FreeBSD e MacOS.

    
por 28.03.2014 / 16:11
1

Você pode fazer login sozinho em um script bash:

logfile=/var/log/mine/whatever.log

log () {
    timestamp=$(date +'%F %T')
    echo -e "$timestamp $1" >> $logfile
    shift
    for a; do
        echo -ne "$a" >> $logfile
    done
}    

log "Hello world.\nAnd so on..."

[...]

Se você estiver executando comandos com saída que deseja registrar:

somecommand 2>&1 >> $logfile

Você também pode enviar mensagens e erros para o criador de logs do sistema (consulte man logger ) e, possivelmente, classificá-los por meio da configuração do syslog.

    
por 28.03.2014 / 14:21

Tags