尽管数据库发生变化,但 Cron 作业每次都会发送相同的数据

尽管数据库发生变化,但 Cron 作业每次都会发送相同的数据

这个问题与 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 脚本中的代码,请告诉我。我不知道为什么它看起来像是缓存!

任何帮助是极大的赞赏!

答案1

我认为你的问题在于这里:

echo "$OUTPUT" > $TEMPFILE

它应该是

echo "$OUTPUT" >| $TEMPFILE

因为 > 如果文件存在则不会覆盖它,除非禁止干扰已设置。

答案2

您的问题似乎是您的 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

一旦环境变量中有了 JAVA_HOME,它就会工作。Cron 本身不使用 /etc/bashrc,因此您的 JAVA 变量可能会完全缺失。

相关内容