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.
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!
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.
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.