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.