Механизм сервлета Tomcat не запущен, но файл pid существует. Что означает это сообщение? Нужно ли восстанавливать Tomcat, если я его получу?

Я делаю сценарий оболочки для перезапуска tomcat после сбоя. Интересно, мне нужно обработать это сообщение в моем сценарии «Сервлетный механизм Tomcat не работает, но файл pid существует». Что означает это сообщение? Нужно ли мне учитывать это как сообщение об ошибке, которое обязывает меня перезапустить Tomcat?

Мой сценарий выглядит следующим образом:

#!/bin/bash
SERVICE=/etc/init.d/tomcat7
STOPPED_MESSAGE=" * Tomcat servlet container is not running."  
PID_FILE_MESSAGE=" * Tomcat servlet engine is not running, but pid file exists."

if [ "`$SERVICE status`" == "$STOPPED_MESSAGE" ];
then  
{
    $SERVICE start
}
else
    if [ "`$SERVICE status`" == "$PID_FILE_MESSAGE" ];
    then
    {
        $SERVICE restart
    }
    fi
fi

person Rami    schedule 04.08.2012    source источник
comment
Вы должны смотреть на коды выхода, а не на текстовый вывод.   -  person jordanm    schedule 05.08.2012
comment
Спасибо @jordanm, можете ли вы опубликовать пример того, как мы можем посмотреть коды выхода?   -  person Rami    schedule 05.08.2012
comment
$SERVICE status; if (( $? == 0 )); then echo "running"; fi. Если вы используете Linux, LSB определяет, какие коды выхода должны быть предоставлены: refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/   -  person jordanm    schedule 05.08.2012


Ответы (2)


Вот определение PID. Файл PID — это файл, содержащий идентификатор процесса. Если сценарии запуска Tomcat выполняются с правильно установленной переменной среды CATALINA_PID, то PID процесса Tomcat будет записан в файл при запуске. Если файл существует, когда вы пытаетесь запустить Tomcat, сценарии откажутся выполняться, потому что он не хочет затирать (возможно, действительный) файл PID.

Если вы уверены, что Tomcat не запущен, просто удалите файл (он должен быть доступен через переменную окружения CATALINA_PID) и повторите попытку.

Я разделяю комментарий @jordanm об использовании кодов выхода вместо проверки определенного (текстового) вывода: последняя версия Tomcat даже не использует сообщения, которые вы показали выше, поэтому она очень хрупкая.

Если вам нужен самозапускающийся сервис, обратите внимание на jsvc, который на самом деле поставляется с двоичными файлами Tomcat в исходной форме.

person Christopher Schultz    schedule 05.08.2012
comment
Спасибо, Кристофер, за ваш ответ, однако я хотел бы знать, почему механизм сервлета Tomcat не работает, но, возможно, существует действительный файл PID? когда произойдет этот случай? что мне делать, если у меня есть это сообщение? - person Rami; 06.08.2012
comment
Пожалуйста, перечитайте мой ответ: он дает ответы на оба вопроса, которые вы (повторно) задаете в своем комментарии. - person Christopher Schultz; 06.08.2012
comment
Спасибо, Кристофер, извините за мою быструю реакцию. - person Rami; 07.08.2012

У меня была такая же проблема, когда я перезапустил tomcat. Также я обнаружил «java.net.BindException: Невозможно назначить запрошенный адрес» в файле журнала cataline.out.

Решение: убейте все java pid с помощью killall -9 java и снова перезапустите tomcat.

Для меня проблема решена

person Vijayaanand Maduraiveeran    schedule 17.11.2014