crontab не работает для запуска Java-класса - PullRequest
0 голосов
/ 02 ноября 2011

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 ]

3 голосов
/ 02 ноября 2011

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

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

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

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

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

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

1 голос
/ 02 ноября 2011

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

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

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

echo "Current directory: `pwd`"

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

...