O trabalho Cron envia os mesmos dados toda vez apesar das mudanças no banco de dados

1

Esta questão está relacionada ao Gentoo Linux.

Eu tenho um cron job que funciona todas as manhãs às 10h. A tarefa cron chama um script bash que, por sua vez, chama um script interessante que consulta o banco de dados em busca de uma coluna de dados e envia por e-mail o resultado para uma lista de destinatários.

Todos os dias o script é executado, ele envia exatamente os mesmos dados. Quando executo o script manualmente, relata (e envia e-mails) os dados corretos. Eu estou em uma perda completa de como resolver ainda mais isso. O que da?

Aqui está o meu script de cronjob:

#!/bin/bash

OUTPUT=""
TEMPFILE=/tmp/dsr.output
MAILTO="[email protected]"
INSTALL_DIR=/usr/local/clearleap/scripts/daily-storage-report

export CLASSPATH=$CLASSPATH:$INSTALL_DIR/lib/postgresql-8.3-603.jdbc4.jar:$INSTALL_DIR

OUTPUT=$(/opt/groovy/bin/groovy $INSTALL_DIR/DailyStorageReport.groovy)
echo "$OUTPUT" > $TEMPFILE
echo $OUTPUT

echo $OUTPUT | /bin/mailx  -s "Daily Storage Report" $MAILTO

Aqui está o próprio cronjob, que fica em /etc/cron.d/dsr_cron:

0 10 * * * root  /usr/local/clearleap/scripts/daily-storage-report/dsr.sh 

Por favor, deixe-me saber se você gostaria de ver o código do script groovy. Eu não tenho idéia porque parece estar fazendo cache!

Qualquer ajuda é muito apreciada!

    
por slappyjam 30.01.2013 / 17:23

2 respostas

0

Eu acho que o seu problema está aqui:

echo "$OUTPUT" > $TEMPFILE

Deve ser

echo "$OUTPUT" >| $TEMPFILE

Como > se o arquivo existir, ele não será sobrescrito, a menos que noclobber esteja definido.

    
por 26.04.2013 / 11:56
0

Seu problema parece ser que seu Groovy não roda a partir do cron, então ele continua enviando o mesmo email.

O que você pode fazer, adicionar ao topo do seu script:

source /etc/bashrc

A linha completa pode ter esta aparência:

30 * * * * source /etc/bashrc; /opt/groovy/bin/groovy /path/to/groovy/script.groovy >>/var/log/MyGroovyScript-stdout.log 2>/var/log/MyGroovyScript-error.log

Ou o que for apropriado para o seu ambiente.

Nesse arquivo, / etc / bashrc, você precisa adicionar o seguinte:

export JAVA_HOME=/usr/java/latest

Depois de ter JAVA_HOME em suas variáveis de ambiente, isso funcionará. O Cron não usa o / etc / bashrc por conta própria para que sua variável JAVA possa estar ausente por completo.

    
por 01.12.2014 / 17:19

Tags