这个问题与 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 变量可能会完全缺失。