web-dev-qa-db-ja.com

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

新しい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のインストールにおけるコマンドの完全な履歴は次のとおりです。

最初にJava using このチュートリアルの手順 をインストールすることから始めました。これは、Tomcatの手順(下の2番目のブロック)で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.

提案されているように、更新されたjdk rpmのyum localinstallこの他の投稿では を実行しても機能しませんでした。


編集:


@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構成にあるようです。どうすれば修正できますか?

18
CodeMed

私は同じ問題を抱えていました、それを修正しました:

  1. tomcatユーザーにTomcatディレクトリ全体の所有権を与える:

    cd /opt && Sudo chown -R Tomcat tomcat/
    
  2. /etc/systemd/system/Tomcat.serviceの以下の行をコメント化します。

    Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
16
user2968675

Javaをデフォルト以外の場所にインストールしたので、Tomcatにそれを見つける場所を教える必要があります。

投稿したユニットファイルでは、Java_HOMEは/ usr/lib/jvm/jreに設定されていますが、Javaインストールに関するセクションではJava_HOMEは/opt/jdk1.8.0_60です。

TomcatのsystemdユニットファイルでJava_HOMEを設定すると、うまくいくと思います。

また、ユニットファイルはユーザーTomcatを指定します。ただし、手動で起動する場合は、ルートとして起動します。この問題は、Tomcatが特権ポートを開こうとしている可能性があります。起動スクリプトはTomcatをrootとして起動しますか?または、ユーザーTomcatとしてプロセスを開始しますか?ユニットファイルからユーザーとグループを削除すると、コマンドライン試行と同じ動作がトリガーされます。

2
Bram

エラーメッセージによると、問題は変数が置き換えられていない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 -xnおよびlogs/catalina.outのコンテンツを報告してください

1
Yves Martin