Запуск Tomcat зависает при загрузке, но успешно работает из командной строки.

Вопрос или проблема

Я установил tomcat9 на ubuntu 16.04, который запускается нормально из командной строки,

sudo /usr/local/tomcat9/startup.sh

и все проекты в webapps могут быть загружены.

Однако он всегда зависает на загрузке “webapps/docs”, если я пытаюсь запустить его при загрузке ОС. Вот снимок экрана catalina.out:

catalina.out


Я попробовал 3 вида методов для автоматического запуска tomcat.

1. Настройка сервиса в директории init.d

1) Скопируйте файл “catalina.sh” в “/etc/init.d” и переименуйте его в “tomcat”
2) Добавьте переменные окружения в этот файл:

CATALINA_HOME=/usr/local/tomcat9
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111 

3) Используйте команду

  service tomcat start

2. Настройка сервиса в systemd

1) Отредактируйте файл “/etc/systemd/system/tomcat.service”
введите описание изображения здесь

2) Загрузите конфигурацию в командной строке

   systemctl daemon-reload
   systemctl start tomat

3) Проверьте статус

   systemctl status tomat

что показывает, что служба tomcat успешно запущена

3. Настройка сервиса “rc.local” сначала, и добавление скрипта запуска в файл “rc.local”

1) Отредактируйте файл “/etc/systemd/system/rc-local.servic”

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

2) Отредактируйте файл “/etc/rc.local “

  sudo /usr/local/tomcat9/bin/startup.sh

3) Включите службу “rc.local”

  sudo systemctl enable rc-local.service

4) Перезагрузите

Все эти методы дали одинаковый результат: tomcat запустился, но загрузка webapps неполная, зависает на загрузке первого приложения “docs”.

У меня нет идей по этому поводу, пожалуйста, помогите.

Похожее поведение у меня было, когда во время загрузки была установлена другая переменная окружения JAVA_HOME.
Подозрительная строка: подозрительная строка

Это выглядит как другая java, чем та, которую вы упомянули с JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111.

Я бы попробовал что-то вроде этого:

  1. Проверьте вашу версию java с помощью update-alternatives --config java
  2. Проверьте, не установлена ли где-то JAVA_PATH

Далее вы упомянули, что скопировали catalina.sh в /etc/init.d. Это тоже может быть проблемой. В наших средах (фактически tomcat7, но я думаю, что это довольно похоже) у нас есть простой скрипт в /etc/init.d, который устанавливает JAVA_HOME и запускает startup.sh. Это выглядит примерно так:

JAVA_HOME=/opt/jdk1.8.0_92/
export JAVA_HOME
JRE_HOME=/opt/jdk1.8.0_92/jre
export JRE_HOME

PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/opt/tomcat

case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh -force
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh -force
sleep 3
sh $CATALINA_HOME/bin/startup.sh
;;

Возможно, стоит рассмотреть возможность запуска startup.sh с помощью вашего /etc/init.d скрипта.

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

В моем случае (используя tomcat 8.5 и unit systemd.service, без rc.local/sysv), решение заключалось в изменении на:

WorkingDirectory=/opt/tomcat-foobar/

Один из способов запустить tomcat при загрузке — использовать cron с атрибутом @reboot:

откройте терминал и введите :

sudo crontab -e

в конце файла введите команду:

@reboot ПУТЬ_ДО_МЕСТА_УСТАНОВКИ_TOMCAT/bin/startup.sh

сохраните файл и выйдите.

Указанная команда будет выполняться каждый раз, когда компьютер загружается.

Ответ или решение

Начало работы Tomcat на Ubuntu 16.04 может вызвать проблемы, особенно если сервер успешно запускается из командной строки, но зависает при старте на загрузке операционной системы. Давайте подробно разберем возможные причины и решения данной проблемы.

Причины зависания Tomcat

  1. Неправильная настройка переменной окружения JAVA_HOME. Обычно, если Tomcat правильно работает при запуске из терминала, но зависает при автозагрузке, это может указывать на проблему с переменными окружения. Например, если вы используете update-alternatives --config java, убедитесь, что Java установлен правильно и JAVA_HOME указывает на нужную версию.

  2. Отсутствие должных прав доступа. При создании службы, которую Tomcat должен использовать для автоматического запуска, необходимо удостовериться, что у него есть необходимые права на доступ к файлам и директориям Tomcat. Рекомендуется запускать Tomcat от имени пользователя, который имеет доступ к каталогу установки Tomcat.

  3. Конфликты с другими службами. Иногда проблемы могут возникать из-за конфликтов с другими сервисами в системе, особенно если несколько приложений зависят от одних и тех же ресурсов.

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

Решения проблемы

Проверка и установка JAVA_HOME

Убедитесь, что переменная окружения JAVA_HOME настроена правильно. Для этого:

  1. Выполните команду:

    update-alternatives --config java

    Это позволит вам убедиться, что используется ожидаемая версия Java.

  2. Также проверьте, не указывает ли где-либо еще на другую версию Java. Это можно сделать командой:

    echo $JAVA_HOME

Использование корректного скрипта для службы

Имеет смысл создать новый скрипт запуска в /etc/init.d/, который бы правильно устанавливал переменные окружения и запускал ваш Tomcat. Пример скрипта:

#!/bin/sh
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111
CATALINA_HOME=/usr/local/tomcat9

case $1 in
start)
    sh $CATALINA_HOME/bin/startup.sh
    ;;
stop)
    sh $CATALINA_HOME/bin/shutdown.sh
    ;;
restart)
    sh $CATALINA_HOME/bin/shutdown.sh
    sleep 3
    sh $CATALINA_HOME/bin/startup.sh
    ;;
*)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    ;;
esac

Не забудьте установить права на исполнение скрипта:

sudo chmod +x /etc/init.d/tomcat

И добавьте сервис в автозагрузку:

sudo update-rc.d tomcat defaults

Использование Systemd

Если вы предпочитаете использовать systemd, убедитесь, что служебный файл настроен правильно. Пример конфигурации файла tomcat.service может выглядеть следующим образом:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=simple
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111
Environment=CATALINA_HOME=/usr/local/tomcat9
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
WorkingDirectory=/usr/local/tomcat9

[Install]
WantedBy=multi-user.target

Не забудьте перезагрузить демона:

sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat

Запуск через Cron

Как дополнительный вариант, можно использовать cron для автозапуска Tomcat. Для этого откройте crontab:

sudo crontab -e

Добавьте следующую строку в конец файла:

@reboot /usr/local/tomcat9/bin/startup.sh

Заключение

Проблемы с зависанием Tomcat при старте системы могут быть обусловлены различными факторами, начиная от неправильно настроенных переменных окружения и заканчивая разрешениями на работу. Следуя перечисленным рекомендациям, вы сможете выявить и устранить причину висящей загрузки Tomcat на вашем сервере Ubuntu. Если после всех попыток проблема остается, возможно, стоит просмотреть логи Tomcat более внимательно и проанализировать, какие именно ошибки или предупреждения возникают в процессе загрузки.

Оцените материал
Добавить комментарий

Капча загружается...