質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

TomcatをSystemdで起動すると、接続できない

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 7,746

hirottsu76

score 11

発生している事象

CentOS7環境のサーバ上で、Tomcat8を使用しています。
サーバ起動時の自動起動を、Systemdのserviceで行いたいと思っています。
コマンドライン上で起動スクリプトを実行した場合は問題なくブラウザからアクセスできるのですが、
Systemdから起動した場合はどういうわけかアクセスができません。(起動には成功します)
原因についてご教授いただければと思います。

設定ファイル・環境等

~rootユーザで、コマンドライン上で起動スクリプト(startup.sh)を実行する場合~

○コンソール出力

Using CATALINA_BASE:   /opt/apache-tomcat/apache-tomcat-8.0.24
Using CATALINA_HOME:   /opt/apache-tomcat/apache-tomcat-8.0.24
Using CATALINA_TMPDIR: /opt/apache-tomcat/apache-tomcat-8.0.24/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
Using CLASSPATH:       .:/opt/apache-tomcat/apache-tomcat-8.0.24/lib/servlet-api.jar:/root/postgresql_jdbc/postgresql-9.4-1202.jdbc42.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/bootstrap.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/tomcat-juli.jar
Tomcat started.


○envコマンド結果

XDG_SESSION_ID=278
HOSTNAME=erp
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
CATALINA_HOME=/opt/apache-tomcat/apache-tomcat-8.0.24
HISTSIZE=1000
SSH_CLIENT=10.0.0.224 49329 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/opt/apache-tomcat/apache-tomcat-8.0.24/bin
LANG=ja_JP.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
CLASSPATH=.:/opt/apache-tomcat/apache-tomcat-8.0.24/lib/servlet-api.jar:/root/postgresql_jdbc/postgresql-9.4-1202.jdbc42.jar
SSH_CONNECTION=10.0.0.224 49329 10.0.0.12 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
OLDPWD=/root


○/etc/profile

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}


if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`id -u`
        UID=`id -ru`
    fi
    USER="`id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge

JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
CATALINA_HOME=/opt/apache-tomcat/apache-tomcat-8.0.24
export JRE_HOME CATALINA_HOME
export CLASSPATH=".:/opt/apache-tomcat/apache-tomcat-8.0.24/lib/servlet-api.jar:/root/postgresql_jdbc/postgresql-9.4-1202.jdbc42.jar"

~Systemdから起動する場合~

○/usr/lib/systemd/system/tomcat8.service

[Unit]
Description=Apache Tomcat 8
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/startup.sh
ExecStop=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/shutdown.sh
RemainAfterExit=yes
User=root
Group=root
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target


○/etc/sysconfig/tomcat

JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64"
JRE_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64"
CATALINA_HOME="/opt/apache-tomcat/apache-tomcat-8.0.24"
CLASSPATH=".:/opt/apache-tomcat/apache-tomcat-8.0.24/lib/servlet-api.jar:/root/postgresql_jdbc/postgresql-9.4-1202.jdbc42.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/bootstrap.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/tomcat-juli.jar"


○systemctl status tomcat8.service -l コマンド結果

● tomcat8.service - Apache Tomcat 8
   Loaded: loaded (/usr/lib/systemd/system/tomcat8.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2016-09-30 14:24:06 JST; 10s ago
  Process: 14700 ExecStop=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/shutdown.sh (code=exited, status=0/SUCCESS)
  Process: 14997 ExecStart=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 15004 (java)
   CGroup: /system.slice/tomcat8.service
           mq15004 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat/apache-tomcat-8.0.24/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/apache-tomcat/apache-tomcat-8.0.24/endorsed -classpath .:/opt/apache-tomcat/apache-tomcat-8.0.24/lib/servlet-api.jar:/root/postgresql_jdbc/postgresql-9.4-1202.jdbc42.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/bootstrap.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat/apache-tomcat-8.0.24 -Dcatalina.home=/opt/apache-tomcat/apache-tomcat-8.0.24 -Djava.io.tmpdir=/opt/apache-tomcat/apache-tomcat-8.0.24/temp org.apache.catalina.startup.Bootstrap start

 930 14:24:06 erp systemd[1]: Starting Apache Tomcat 8...
 930 14:24:06 erp startup.sh[14997]: Using CATALINA_BASE:   /opt/apache-tomcat/apache-tomcat-8.0.24
 930 14:24:06 erp startup.sh[14997]: Using CATALINA_HOME:   /opt/apache-tomcat/apache-tomcat-8.0.24
 930 14:24:06 erp startup.sh[14997]: Using CATALINA_TMPDIR: /opt/apache-tomcat/apache-tomcat-8.0.24/temp
 930 14:24:06 erp startup.sh[14997]: Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
 930 14:24:06 erp startup.sh[14997]: Using CLASSPATH:       .:/opt/apache-tomcat/apache-tomcat-8.0.24/lib/servlet-api.jar:/root/postgresql_jdbc/postgresql-9.4-1202.jdbc42.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/bootstrap.jar:/opt/apache-tomcat/apache-tomcat-8.0.24/bin/tomcat-juli.jar
 930 14:24:06 erp startup.sh[14997]: Tomcat started.
 930 14:24:06 erp systemd[1]: Started Apache Tomcat 8.

試したこと

・ポートの使用状況、LISTEN状態は両起動方法で差異なし

補足情報(言語/FW/ツール等のバージョンなど)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mit0223

    2016/10/01 01:24

    アクセスできないというのは、現象でしょうか?ブラウザ上のエラーメッセージはどのようなものですか?エラーになるまでに時間はかかりますか?tomcatのログにはエラーは出て無いのでしょうか?

    キャンセル

回答 2

+1

手元の環境(CentOS72)で試してみました。まずは OpenJDK を入れます。

vagrant@localhost:~$ sudo yum install java-1.8.0-openjdk-headless

残りの手順は、基本的に http://weblabo.oscasierra.net/installing-tomcat8-centos7-1/ 
に従いました。ただし Oracle JDK8 は入れず、tomcat のバージョン番号を
8.0.37 に読み替えています。追加の jar は入れていません。
/etc/sysconfig/tomcat も作らず、/etc/profile もいじっていません。

vagrant@localhost:~$ w3m -dump_source http://localhost:8080 | grep 8.0.37
        <title>Apache Tomcat/8.0.37</title>
                <h1>Apache Tomcat/8.0.37</h1>

違いといえば、systemd の起動タイプが oneshot であるところでしょうか。
forking にする場合は PID を記憶しておく必要があるようです。

http://enakai00.hatenablog.com/entry/20130917/1379374797

yum で入る tomcat7 でも simple になっていましたので、あえて forking 
にする必要はないと思います。

なお、root として起動するのはセキュリティ上推奨されません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/30 18:23

    ご回答ありがとうございます。
    Type=simple
    にしてみましたが、挙動変わらずでした。
    起動ユーザは後日直してみたいと思いますが、今回の問題とは無関係とみています。

    キャンセル

checkベストアンサー

0

もし、tomcatユーザがあるならtomcatユーザで起動

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/startup.sh
ExecStop=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/shutdown.sh
RemainAfterExit=yes
User=root
Group=root
SuccessExitStatus=143
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/startup.sh
ExecStop=/opt/apache-tomcat/apache-tomcat-8.0.24/bin/shutdown.sh
RemainAfterExit=yes
User=tomcat
Group=tomcat
SuccessExitStatus=143


それに、selinuxを無効化して試してみてはいかがでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる