Existe algum registro estendido disponível para tarefas cron?

Existe algum registro estendido disponível para tarefas cron?

Eu tenho 3 scripts em /etc/cron.daily. Meus logs cron são escritos em /var/log/cron. A seguir está uma entrada para o cron acima que foi executado.

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

Aqui o stdoutou stderrdos scripts dentro do cron não está disponível, isso mostra que o run-partscomando foi executado nesta pasta.

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

NOTA: Não consigo editar os scripts cron.dailypara redirecionar saídas e erros para um arquivo de log.

Responder1

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 no Windows, onde algo será exibido na barra de tarefas com uma mensagem pop-up se precisar notificá-lo sobre algo. Como os cronjobs (teoricamente) não deveriam produzir nenhuma saída (já que ninguém deveria estar lá para vê-la), qualquer saída (stdout ou stderr) é tratada como se fosse uma possível indicação de um erro ou problema e, portanto, um email é enviado para o proprietário do cronjob para solicitar que eles verifiquem.

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 newaliasescomando (para reconstruir o banco de dados de aliases de correio). Depois disso, comecei a receber emails do root na caixa de entrada do meu email 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

Olhe para isso em toda a sua glória

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

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

root: /var/log/rootMails

Canalizando o e-mail para um script:

root: |/usr/local/bin/filterMail

Uma alternativa para mexer com aliases é usar a MAILTO=opção dentro do crontab do usuário que muitos daemons 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 será descartada em sua caixa de correio (que é o que aliasesacontece).

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

Responder2

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

Responder3

Você pode fazer login dentro de 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 que possuem saída que deseja registrar:

somecommand 2>&1 >> $logfile

Você também pode enviar mensagens e erros para o registrador do sistema (consulte Recursos man logger) e potencialmente classificá-los por meio da configuração do syslog.

informação relacionada