Чтобы убедиться, что 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, они обычно сильно ограничены (включая сокращенный путь).