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

Скрипт запуска glassfish не работает через crontab

Я создал сценарий, чтобы проверить, работает ли мой сервер Glassfish, если это не так, он пытается убить Java-процесс, чтобы убедиться, что он не завис, а затем выдает начальный домен asadmin команда

Если этот сценарий запускается из командной строки, он успешен в 100% случаев. Когда он запускается из вкладки cron, выполняется каждая строка, но начальный домен asadmin строка не выполняется или, по крайней мере, не завершается, то есть сервер не работает после запуска этого сценария.

Для тех, кто не знаком с glassfish или утилитой asadmin, используемой для запуска сервера, я понимаю, что используется разветвленный процесс. могло ли это вызвать проблемы через cron?

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

заранее спасибо за любую помощь ... я выдергиваю волосы, пытаясь сделать эту работу!

#!/bin/bash
timevar=`date +%d-%m-%Y_%H.%M.%S` 
process_name='java'
get_contents=`cat urls.txt`  

for i in $get_contents
do
echo checking $i
statuscode=$(curl --connect-timeout 10  --write-out %{http_code} --silent --output /dev/null $i)
case $statuscode in
    200)
        echo "$timevar $i $statuscode okay" >> /usr/home/user1/logfile.txt
        ;;
    *)
        echo "$timevar $i $statuscode bad" >> /usr/home/user1/logfile.txt
        echo "Status $statuscode found" | mail -s "Check of $i failed" some.address@mail.com
        process_id=`ps acx | grep -i $process_name | awk {'print $1'}`
        if [ -z "$process_id" ]
        then
            echo "java wasn't found in the process list"
        else
            echo "Killing java, currently process $process_id"
            kill -9 $process_id
        fi
        /usr/home/user1/glassfish3/bin/asadmin start-domain domain1
        ;;
esac
done

Кроме того, для полноты, вот запись на вкладке cron:

*/2 * * * *  /usr/home/user1/server.check.sh >> /usr/home/user1/cron.log

Возможно ли, что внутри cronjob ${JAVA_HOME} не установлен?

Java всегда требует, чтобы в среде были установлены определенные переменные среды. Возможно, вы устанавливаете их автоматически, когда используете cli, но у cronjob их нет. Стараться сделать env на вашем клиенте, чтобы узнать, есть ли что-то, связанное с Java, например ${JAVA_HOME} и если да, убедитесь, что они также есть в cronjob. Например, добавив их в начало вашего скрипта.

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

Проблема была в том, что путь !! несмотря на то, что java_home был установлен, сама java не была на пути для демона cron.

Чтобы быстро проверить, какой путь доступен вашему cron, добавьте эту строку:

*/2 * * * * env > /usr/home/user1/env.output

Насколько я могу судить, PATH, изначально доступный для cron, довольно минимален. Поскольку java находился в / usr / local / bin, я добавил это в путь прямо в crontab и kaboom! это сработало!

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

*/2 * * * * /usr/home/user1/server.check.sh >> /usr/home/user1/cron.log