Cron作业每次发送相同的数据,尽pipe数据库发生变化

这个问题与Gentoo Linux有关。

我有每天早上10点运行的cron工作。 cron作业调用一个bash脚本,该脚本又调用一个groovy脚本来查询数据库中的一列数据并将结果通过电子邮件发送给收件人列表。

脚本每天执行,它发出完全相同的数据。 当我手动运行脚本时,报告(和电子邮件)正确的数据。 我完全失去了如何进一步排除故障。 是什么赋予了?

这是我的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 

这是cronjob本身,它位于/etc/cron.d/dsr_cron:

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

请让我知道,如果你想看到groovy脚本的代码。 我不知道为什么它似乎是caching!

任何帮助是极大的赞赏!

我认为你的问题在于:

 echo "$OUTPUT" > $TEMPFILE 

它应该是

 echo "$OUTPUT" >| $TEMPFILE 

因为>如果文件存在不会覆盖它,除非noclobber被设置。

你的问题似乎是你的Groovy不能从cron运行,所以它只是继续发送相同的电子邮件。

你可以做什么,添加到脚本的顶部:

 source /etc/bashrc 

完整的行可能是这样的:

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

或者任何适合你的环境的东西。

在该文件/ etc / bashrc中,您需要添加以下内容:

 export JAVA_HOME=/usr/java/latest 

一旦你在你的环境variables中有JAVA_HOME,它就会工作。 Cron本身不使用/ etc / bashrc,所以你的JAVAvariables可能会完全丢失。