Этот вопрос относится к 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
Поскольку>, если файл существует, он не будет перезаписан, если никчемный установлен.