Tomcat 8 не запускается после начальной установки

18

Я пытаюсь установить Tomcat на новую виртуальную машину CentOS 7. Я успешно установил apache httpd и смог получить тестовую страницу apache при вводе ip виртуальной машины в веб-браузер на другом компьютере в сети. Но я получаю следующее сообщение об ошибке при вводе systemctl start tomcat:

Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.  

Вот полная история команд в установке java и tomcat:

Сначала я установил java, используя инструкции из этого руководства, потому что инструкции tomcat (второй блок ниже) хотели, чтобы я использовал openjdk, и мне нужно использовать настоящую java:

//Install Java
# cd /opt/
# yum install wget
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz"

# tar xzf jdk-8u60-linux-x64.tar.gz

# cd /opt/jdk1.8.0_60/
# alternatives --install /usr/bin/java java /opt/jdk1.8.0_60/bin/java 2
# alternatives --config java
(Select the version you want)
# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_60/bin/jar 2
# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_60/bin/javac 2
# alternatives --set jar /opt/jdk1.8.0_60/bin/jar
# alternatives --set javac /opt/jdk1.8.0_60/bin/javac
# java -version (checks to see you install correct version)
# export JAVA_HOME=/opt/jdk1.8.0_60
# export JRE_HOME=/opt/jdk1.8.0_60/jre
# export PATH=$PATH:/opt/jdk1.8.0_60/bin:/opt/jdk1.8.0_60/jre/bin

Обратите внимание, что в предыдущем руководстве не объясняется, как поместить переменные среды /etc/environment, поэтому я остановился перед этой командой.

Следующие команды взяты из этого другого урока . Я начал в точке после установки Java:

//Install Tomcat
Login as sudo user, not root.
# sudo groupadd tomcat
# sudo useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
# cd ~
# wget http://mirrors.gigenet.com/apache/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27.tar.gz
# sudo mkdir /opt/tomcat
# sudo tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
# cd /opt/tomcat
# sudo chgrp -R tomcat conf
# sudo chmod g+rwx conf
# sudo chmod g+r conf/*
# sudo chown -R tomcat work/ temp/ logs/
# sudo vi /etc/systemd/system/tomcat.service
Cut and paste the following file contents:
##################################################
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
##################################################
# sudo systemctl daemon-reload

# sudo systemctl start tomcat
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
# sudo systemctl start tomcat.service

Работа для tomcat.service не удалась. Смотрите 'systemctl status tomcat.service' и 'journalctl -xn' для получения подробной информации. # sudo systemctl enable tomcat.service ln -s '/etc/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service' # sudo systemctl enable tomcat

# sudo systemctl status tomcat.service
tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
   Active: failed (Result: exit-code) since Tue 2015-10-13 11:05:31 PDT; 47s ago

Oct 13 11:05:31 localhost.localdomain kill[20887]: -q, --queue <sig>      use sigqueue(2) rather than kill(2)
Oct 13 11:05:31 localhost.localdomain kill[20887]: -p, --pid              print pids without signaling them
Oct 13 11:05:31 localhost.localdomain kill[20887]: -l, --list [=<signal>] list signal names, or convert one to a name
Oct 13 11:05:31 localhost.localdomain kill[20887]: -L, --table            list signal names and numbers
Oct 13 11:05:31 localhost.localdomain kill[20887]: -h, --help     display this help and exit
Oct 13 11:05:31 localhost.localdomain kill[20887]: -V, --version  output version information and exit
Oct 13 11:05:31 localhost.localdomain kill[20887]: For more details see kill(1).
Oct 13 11:05:31 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=1
Oct 13 11:05:31 localhost.localdomain systemd[1]: Failed to start Apache Tomcat Web Application Container.
Oct 13 11:05:31 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state.

Выполнение yum localinstallобновленного jdk rpm, как предлагается в этой другой публикации , не сработало.


правок:


Согласно предложению @ Bram, я изменил файл конфигурации на следующий, но все еще получаю ту же ошибку:

# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/opt/jdk1.8.0_60
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

Кроме того, согласно комментарию @ JeffSchaller в чате, я смог заставить tomcat изначально запускаться следующим образом:

[user@localhost tomcat]$ sudo /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
[user@localhost tomcat]$

Таким образом, проблема в этом OP, похоже, связана с конфигурацией systemd. Как я могу это исправить?

CodeMed
источник
Любые ошибки в файле журнала tomcat? Если я правильно помню, файл называется catalina.out или что-то в этом роде.
Брэм
Журналы Tomcat sudo systemctl start tomcat.service- это куча ошибок, в которых отказано в разрешении и занимающих сотни строк.
CodeMed

Ответы:

16

У меня была такая же проблема, исправлена ​​с помощью:

  1. предоставление пользователю tomcat права собственности на весь tomcatкаталог:

    cd /opt && sudo chown -R tomcat tomcat/
    
  2. и комментирование ниже строки в /etc/systemd/system/tomcat.service:

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
user2968675
источник
1
Безопасно ли сделать Tomcat владельцем всей папки? Я думал, что мы хотим максимально ограничить доступ?
user3203425
У меня нет этой настройки для тестирования сейчас, но я думаю, что проблема была в: "sudo chown -R tomcat work / temp / logs /". Я бы сказал, что для этого нужно владение "bin /", по крайней мере.
user2968675
Один шаг сделал это для меня, кажется. Что именно делает строка в шаге 2?
Кимберли W
Вы правы, шаг 1 достаточно, чтобы решить эту конкретную проблему. Шаг 2 устанавливает размер кучи Java и тип сборки мусора. Я нуждался в этом из-за своих свойств окружающей среды, но большинство людей, вероятно, не будут.
user2968675
в моем случае только cd /opt && sudo chown -R tomcat tomcat/сработало. Потому что я сменил владельца на системного пользователя и забыл сделать tomcat в качестве владельца обратно
imdzeeshan
2

Поскольку вы установили Java в не дефолтном месте, вам нужно указать tomcat, где его найти.

В файле модуля, который вы разместили, JAVA_HOME установлен на / usr / lib / jvm / jre, но в разделе об установке java JAVA_HOME - /opt/jdk1.8.0_60.

Если вы установите JAVA_HOME в системном файле tomcat, я думаю, это сработает.

Также в файле модуля указан пользователь tomcat. Но когда вы запускаете его вручную, вы запускаете его как root. Проблема, вероятно, в том, что Tomcat пытается открыть привилегированный порт. Стартовый скрипт запускает tomcat от имени root? Или он запускает процессы как пользователь tomcat? Удаление пользователя и группы из файла модуля должно привести к тому же поведению, что и попытка командной строки.

Брэм
источник
Как исправить следующую ошибку: не удалось выполнить задание для tomcat8.service, поскольку процесс управления завершился с кодом ошибки. Подробности смотрите в разделах «systemctl status tomcat8.service» и «journalctl -xe». invoke-rc.d: initscript tomcat8, действие «запуск» не выполнено. -> sudo nano / etc / default / tomcat8 -> Установить JAVA_HOME JAVA_HOME = / usr / lib / jvm / java-8-oracle -> gist.github.com/alexislucena/89a046dc747123faf4496fb946c1fe79
объединить
1

По сообщениям об ошибках, я думаю, что проблема возникает из-за того, что ExecStop=/bin/kill -15 $MAINPIDпеременная не заменена. Согласно сервисной документации $MAINPIDожидается только для ExecReloadкоманды. Остается вопрос: почему ExecStopзапускается при срабатывании start?

Можно оставить systemdрабочий каталог процесса JVM, /который может не относиться к развернутым приложениям.

Я предлагаю вам двигаться CATALINA_OPTSи JAVA_OPTSв /opt/tomcat/bin/setenv.shсценарии и попробовать первый такой простой конфигурации:

[Unit]
Description=Apache Tomcat
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/java/default
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat

WorkingDirectory=/opt/tomcat

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

В любом случае, пожалуйста, сообщите journalctl -xnи logs/catalina.outсодержание

Ив Мартин
источник