tomcat 8 tidak akan mulai setelah instalasi awal

18

Saya mencoba untuk menginstal kucing jantan pada mesin virtual CentOS 7 baru. Saya berhasil menginstal apache httpd, dan saya bisa mendapatkan halaman uji apache ketika saya mengetik ip dari mesin virtual ke browser web di komputer lain di jaringan. Tapi saya mendapatkan pesan kesalahan berikut ketika saya mengetik systemctl start tomcat:

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

Berikut ini adalah sejarah lengkap dari perintah dalam menginstal java dan kucing jantan:

Saya pertama kali mulai dengan menginstal java menggunakan instruksi dari tutorial ini karena instruksi tomcat (blok kedua di bawah) ingin saya menggunakan openjdk, dan saya perlu menggunakan java nyata:

//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

Perhatikan bahwa tutorial sebelumnya tidak menjelaskan cara memasukkan variabel lingkungan /etc/environment, jadi saya berhenti sebelum perintah itu.

Perintah berikut berasal dari tutorial lain ini . Saya mulai pada titik setelah menginstal 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

Pekerjaan untuk tomcat.service gagal. Lihat 'systemctl status tomcat.service' dan 'journalctl -xn' untuk detailnya. # sudo systemctl aktifkan tomcat.service ln -s '/etc/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service' # sudo systemctl aktifkan 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.

Melakukan yum localinstallrpm jdk yang diperbarui, seperti yang disarankan dalam posting lain ini , tidak berhasil.


EDIT:


Sesuai saran @ Bram, saya mengubah file konfigurasi ke yang berikut, tetapi saya masih mendapatkan kesalahan yang sama:

# 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

Juga, sesuai komentar @ JeffSchaller dalam obrolan, saya dapat meminta kucing jantan untuk memulai secara asli sebagai berikut:

[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]$

Jadi masalah dalam OP ini tampaknya dengan konfigurasi systemd. Bagaimana saya bisa memperbaikinya?

CodeMed
sumber
Adakah kesalahan dalam file log kucing jantan? Jika saya ingat dengan benar file tersebut disebut catalina.out atau sesuatu seperti itu.
Bram
Log Tomcat setelah itu sudo systemctl start tomcat.serviceadalah sekelompok izin ditolak kesalahan yang mengambil ratusan baris.
CodeMed

Jawaban:

16

Saya memiliki masalah yang sama, memperbaikinya dengan:

  1. memberikan kepemilikan pengguna tomcat pada seluruh tomcatdirektori:

    cd /opt && sudo chown -R tomcat tomcat/
    
  2. dan berkomentar di bawah baris di /etc/systemd/system/tomcat.service:

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
pengguna2968675
sumber
1
Apakah aman untuk membuat kucing jantan pemilik seluruh folder? Saya pikir kami ingin membatasi akses sebanyak mungkin?
user3203425
Saya tidak memiliki pengaturan ini untuk menguji sekarang, tapi saya pikir masalahnya ada di: "sudo chown -R tomcat work / temp / logs /". Saya akan mengatakan itu membutuhkan kepemilikan "bin /" juga setidaknya.
user2968675
Langkah 1 saja tampaknya melakukannya untuk saya. Apa tepatnya yang dilakukan garis 2?
Kimberly W
Anda benar, langkah 1 sudah cukup untuk memperbaiki masalah khusus ini. Langkah 2 mengatur ukuran tumpukan java dan jenis pengumpulan sampah. Saya membutuhkannya karena properti lingkungan saya tetapi kebanyakan orang mungkin tidak akan melakukannya.
user2968675
dalam kasus saya hanya cd /opt && sudo chown -R tomcat tomcat/berfungsi. Karena saya mengubah pemilik menjadi pengguna sistem dan lupa menjadikan kucing jantan sebagai pemilik kembali
imdzeeshan
2

Karena Anda menginstal Java di lokasi non-defalt, Anda perlu memberi tahu tomcat di mana menemukannya.

Dalam file unit yang Anda poskan JAVA_HOME diatur ke / usr / lib / jvm / jre tetapi di bagian tentang instalasi java JAVA_HOME adalah /opt/jdk1.8.0_60.

Jika Anda mengatur JAVA_HOME dalam file unit tomcat systemd, saya yakin itu akan berhasil.

File unit juga menentukan kucing jantan pengguna. Tetapi ketika Anda memulainya secara manual, Anda memulainya sebagai root. Masalahnya adalah kemungkinan bahwa kucing jantan mencoba untuk membuka port istimewa. Apakah skrip mulai tomcat sebagai root? Atau apakah ia memulai proses sebagai kucing jantan pengguna? Menghapus pengguna dan grup dari file unit harus memicu perilaku yang sama dari upaya baris perintah Anda.

Bram
sumber
Cara memperbaiki kesalahan berikut: Pekerjaan untuk tomcat8.service gagal karena proses kontrol keluar dengan kode kesalahan. Lihat "systemctl status tomcat8.service" dan "journalctl -xe" untuk detailnya. invoke-rc.d: initcript tomcat8, aksi "start" gagal. -> sudo nano / etc / default / tomcat8 -> Set JAVA_HOME JAVA_HOME = / usr / lib / jvm / java-8-oracle -> gist.github.com/alexislucena/89a046dc747123faf4496fb946c1fe79
Combine
1

Menurut pesan kesalahan, saya pikir masalahnya berasal dari ExecStop=/bin/kill -15 $MAINPIDmana variabel tidak diganti. Menurut dokumentasi layanan $MAINPIDdiharapkan hanya untuk ExecReloadperintah. Pertanyaannya tetap: mengapa ExecStopdijalankan ketika Anda memicu start?

Dimungkinkan systemdmeninggalkan direktori kerja proses JVM karena /mungkin tidak relevan untuk aplikasi yang digunakan.

Saya sarankan Anda pindah CATALINA_OPTSdan JAVA_OPTSmasuk ke /opt/tomcat/bin/setenv.shskrip dan coba dulu dengan konfigurasi sederhana seperti ini:

[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

Dalam hal apa pun, silakan laporkan journalctl -xndan logs/catalina.outkonten

Yves Martin
sumber