crontab не работает для запуска Java-класса

testjob.sh

#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.6.0_07
echo "Java Home is $JAVA_HOME"
export CLASSPATH=.:..:$CLASSPATH:
echo "Path is is $PATH"
echo "CLASSPATH is is $CLASSPATH"
$JAVA_HOME/bin/java  TestJob
echo "$JAVA_HOME/bin/java  TestJob"

crontab -e

* * * * * /usr/testjob.sh  >> /usr/result.txt 2>&1

если я запускаю скрипт оболочки вручную, он работает нормально, но когда он пройдет через задание crontab, произойдет ошибка, так как класс не найден..

пожалуйста, предложите..

2 ответа

Посмотри на это! Должен ответить на ваш вопрос

Где я могу установить переменные окружения, которые будет использовать crontab?

Снова прочитайте это http://linuxshellaccount.blogspot.com/2007/10/crontab-and-your-environment.html\

Самый простой способ убедиться в том, что в cron вы используете ту же среду, что и при запуске любого скрипта обычного пользователя, - это "создать" среду в скрипте, добавив следующую строку:

, /etc/profile . /home/user/.profile

в начало вашего скрипта (под строкой #!). Шаблоны буквальных точек, пробелов и имен файлов указывают вашей оболочке на чтение всех переменных в этом именованном файле, чтобы вы могли запускать задание cron в той же среде, что и при ручном тестировании, что могло бы избежать проблем, вызванных пунктами 1 и 2 выше,

Ваш classpath установлен как "." и "..", что означает текущий каталог и его родительский каталог. Поэтому, когда вы запускаете его локально, вы должны быть в определенном каталоге, чтобы он работал.

Попробуйте установить classpath в абсолютный каталог в вашем скрипте.

Чтобы проверить, какой каталог является текущим каталогом, вы также можете установить

echo "Current directory: `pwd`"

в ваш testjob.sh скрипт для иллюстрации различий при вызове "вручную" и через crontab.

Другие вопросы по тегам