Назад | Перейти на главную страницу

Задание Cron отправляет одни и те же данные каждый раз, несмотря на изменения в базе данных

Этот вопрос относится к Gentoo Linux.

У меня есть задание cron, которое запускается каждое утро в 10 утра. Задание cron вызывает сценарий bash, который, в свою очередь, вызывает отличный сценарий, который запрашивает в базе данных столбец данных и отправляет результат по электронной почте списку получателей.

Каждый день скрипт отправляет одни и те же данные. Когда я запускаю скрипт вручную, он сообщает (и отправляет по электронной почте) правильные данные. Я совершенно не знаю, как это исправить. Что дает?

Вот мой скрипт cronjob:

#!/bin/bash

OUTPUT=""
TEMPFILE=/tmp/dsr.output
MAILTO="yourmom@yourmomshouse.com"
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

Вот сама задача cron, которая находится в /etc/cron.d/dsr_cron:

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

Пожалуйста, дайте мне знать, если вы хотите увидеть код из отличного скрипта. Понятия не имею, почему он кешируется!

Любая помощь приветствуется!

Кажется, ваша проблема в том, что ваш 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 может полностью отсутствовать.

Я думаю, ваша проблема здесь:

echo "$OUTPUT" > $TEMPFILE

Так должно быть

echo "$OUTPUT" >| $TEMPFILE

Поскольку>, если файл существует, он не будет перезаписан, если никчемный установлен.