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 เปิดใช้งาน tomcat.service ln -s '/etc/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service' # sudo systemctl เปิดใช้งาน tomcat.service

# 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 localinstalljdk รอบต่อนาทีที่อัปเดตตามที่แนะนำในการโพสต์อื่นนี้ไม่ได้ผล


การแก้ไข:


ตามคำแนะนำของ @ 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 config ฉันจะแก้ไขได้อย่างไร


มีข้อผิดพลาดใด ๆ ในไฟล์บันทึกของ Tomcat หรือไม่ ถ้าฉันจำได้อย่างถูกต้องไฟล์นี้เรียกว่า catalina.out หรืออะไรทำนองนั้น
Bram

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 /" ฉันจะบอกว่ามันต้องการความเป็นเจ้าของ "bin /" เช่นกันอย่างน้อย
user2968675

ขั้นตอนที่ 1 เพียงอย่างเดียวก็ทำให้ฉันดูเหมือน บรรทัดในขั้นตอนที่ 2 ทำอะไรกันแน่
Kimberly W

คุณพูดถูกขั้นตอนที่ 1 ก็เพียงพอแล้วที่จะแก้ไขปัญหานี้ ขั้นตอนที่ 2 ตั้งค่าขนาดของ heap java และประเภทการรวบรวมขยะ ฉันต้องการมันเพราะคุณสมบัติสภาพแวดล้อมของฉัน แต่คนส่วนใหญ่อาจจะไม่
user2968675

ในกรณีของฉันใช้cd /opt && sudo chown -R tomcat tomcat/งานได้เท่านั้น เพราะฉันเปลี่ยนเจ้าของเป็นผู้ใช้ระบบและลืมที่จะทำให้แมวตัวผู้กลับมาเป็นเจ้าของอีกครั้ง
imdzeeshan

2

เมื่อคุณติดตั้ง Java ในที่ที่ไม่ใช่ defalt คุณต้องแจ้งให้ tomcat ทราบว่าจะหาได้ที่ไหน

ในไฟล์หน่วยที่คุณโพสต์ JAVA_HOME ถูกตั้งค่าเป็น / usr / lib / jvm / jre แต่ในส่วนเกี่ยวกับการติดตั้ง java JAVA_HOME คือ /opt/jdk1.8.0_60

หากคุณตั้งค่า JAVA_HOME ในไฟล์หน่วย tomcat systemd ฉันเชื่อว่ามันใช้งานได้

นอกจากนี้ไฟล์หน่วยระบุผู้ใช้คราวกลาง แต่เมื่อคุณเริ่มต้นด้วยตนเองคุณจะเริ่มต้นเป็น root ปัญหาน่าจะเกิดขึ้นว่า tomcat พยายามเปิดพอร์ตที่มีสิทธิพิเศษ สคริปต์เริ่มต้นเริ่มต้น 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เนื้อหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.