Tomcat 8は初期インストール後に起動しません


18

新しいCentOS 7仮想マシンにTomcatをインストールしようとしています。Apache httpdを正常にインストールしました。ネットワーク内の別のコンピューターのWebブラウザーに仮想マシンのIPを入力すると、Apacheテストページを取得できます。しかし、入力すると次のエラーメッセージが表示されますsystemctl start tomcat

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

javaとtomcatのインストールにおけるコマンドの完全な履歴は次のとおりです。

Tomcatの指示(下の2番目のブロック)でopenjdkを使用する必要があり、実際のJavaを使用する必要があるため、まずこのチュートリアルの指示を使用し 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構成にあるようです。どうすれば修正できますか?


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 /」にあったと思います。少なくとも「bin /」の所有権も必要だと思います。
user2968675

ステップ1だけでそれができたようです。ステップ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です。

TomcatのsystemdユニットファイルでJAVA_HOMEを設定すると、動作するはずです。

また、ユニットファイルはユーザーtomcatを指定します。ただし、手動で起動する場合は、rootとして起動します。この問題は、tomcatが特権ポートを開こうとする可能性が高いことです。起動スクリプトは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変数が置き換えられていないところから来ていると思います。サービスの文書によると$MAINPIDExecReloadコマンドに対してのみ期待されています。問題は残っています:ExecStopトリガーするときに実行されるのはなぜstartですか?

それは可能であるsystemdとして、葉JVMプロセスの作業ディレクトリ/デプロイされたアプリケーションのために適切でない可能性があります。

私はあなたが動く提案CATALINA_OPTSJAVA_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 -xnlogs/catalina.out内容

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.