新しい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のインストールを開始しました。このチュートリアルのガイドラインなぜなら、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は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]$
したがって、このOPの問題はシステム構成に関連しているようです。どうすれば解決できますか?
答え1
私も同じ問題があり、次のように解決しました。
Tomcatユーザーにディレクトリ
tomcat
全体の所有権を付与します。cd /opt && sudo chown -R tomcat tomcat/
そして/etc/systemd/system/tomcat.serviceで次の行をコメントアウトします。
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
答え2
デフォルト以外の場所にJavaをインストールしたので、TomcatにJavaが見つかる場所を教えてください。
公開されたユニットファイルではJAVA_HOMEが/usr/lib/jvm/jreに設定されていますが、Javaインストール部分ではJAVA_HOMEが/opt/jdk1.8.0_60になっています。
TomcatシステムユニットファイルにJAVA_HOMEを設定するとうまくいくと思います。
単位ファイルはユーザーtomcatも指定します。ただし、手動で起動するとルートで始まります。問題は、Tomcatが特権ポートを開こうとする可能性が高いです。起動スクリプトはTomcatをrootとして起動しますか?それともユーザーtomcatでプロセスを開始しますか?ユニットファイルからユーザーとグループを削除すると、コマンドラインの試行と同じ動作がトリガーされます。
答え3
エラーメッセージを見ると、ExecStop=/bin/kill -15 $MAINPID
変数が置き換えられない部分が問題のようです。サービス文書によると、$MAINPID
これはコマンドを介してのみ機能すると予想されますExecReload
。問題はまだ残っています。なぜExecStop
トリガーで実行されますかstart
?
JVMプロセス作業ディレクトリは、デプロイされたアプリケーションとは無関係である可能性があるため、残すことがsystemd
できます。/
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
内容をお願いします