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

Запустите Tomcat через cronjob

Чтобы убедиться, что Tomcat работает все время, я написал следующий сценарий оболочки

#!/bin/bash

status="$(curl -s http://www.domain.com/check)"

if [ "$status" != "OK" ]
then
    /opt/apache-tomcat-8.0.15/bin/startup.sh
    /usr/sbin/sendmail me@domain.com < email.txt
fi

и добавил его в crontab через

*/1 * * * * /opt/scripts/check.sh

Теперь, если я выключу сервер вручную, я получаю электронное письмо каждую минуту, но по какой-то причине скрипт не запускает Tomcat. Однако, если я выполню check.sh вручную, я получаю электронное письмо, и Tomcat снова запускается.

Есть идеи, почему добавление скрипта в crontab не запускает Tomcat?

@Craig Miskell: Спасибо, что указали мне правильное направление. Вот как я решил проблему:

Сначала я добавил следующие строки кода в /etc/crontab:

SHELL=/bin/bash
PATH=/opt/jdk1.8.0_25/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
MAILTO=root
HOME=/root
JAVA_HOME=/opt/jdk1.8.0_25

Во-вторых, я обновил сценарий оболочки:

#!/bin/bash

export JAVA_HOME=/opt/jdk1.8.0_25
export PATH=$PATH:/opt/jdk1.8.0_25/bin

status="$(curl -s http://www.domain.com/check)"

if [ "$status" != "OK" ]
then
    /opt/apache-tomcat-8.0.15/bin/startup.sh
    /usr/sbin/sendmail me@domain.com < email.txt
fi

Запись в crontab -e Я вообще не трогал.

Еще раз спасибо, надеюсь, это поможет!

Наиболее вероятный ответ - это переменные среды, то есть интерактивная оболочка имеет много значений (включая довольно полный $ PATH), тогда как для программ, запускаемых из cron, они обычно сильно ограничены (включая сокращенный путь).