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 включити 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]$

Таким чином, проблема в цій ОП, здається, пов'язана з системним конфігурацією. Як я можу це виправити?


Будь-які помилки у файлі журналу 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'
    

1
Чи безпечно зробити tomcat власником всієї папки? Я думав, ми хочемо максимально обмежити доступ?
user3203425

Зараз у мене немає налаштування для тестування, але я думаю, що проблема полягала в: "sudo chown -R tomcat work / temp / logs /". Я б сказав, що як мінімум потрібна власність на "бін /".
користувач2968675

Крок 1 поодинці зробив це для мене, здається. Що точно робить рядок на кроці 2?
Кімберлі Ш

Ви праві, кроку 1 достатньо, щоб виправити цю конкретну проблему. Крок 2 встановлює розмір кучі Java та тип збору сміття. Мені це було потрібно через свої властивості навколишнього середовища, але більшість людей, мабуть, не хочуть.
користувач2968675

у моєму випадку 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, помилка дії "start". -> 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вміст

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.