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

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

ただいまの
回答率

90.49%

  • CentOS

    3187questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Tomcat

    625questions

    TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

tomcatをserviceに登録して起動しようとするとlogに対してpermissionエラーが発生する。

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 7,702

leo_xxx

score 7

・環境
OS CentOS release 6.7 (Final)
tomcat 7.0.55

tomcatをserviceに登録してserviceから実行しようとするとpermissionエラーが発生します。
serviceを実行するユーザはrootではなく通常のユーザです。
原因として何が考えられるでしょうか?

serviceからではなく通常の起動方法

sudo -u tomcat /opt/apache-tomcat/apache-tomcat-7.0.55/bin/startup.sh

の実行では、特に問題なく動作します。

serviceから実行したときのエラーは以下のとおりです。

Starting tomcat
Using CATALINA_BASE:   /opt/apache-tomcat/apache-tomcat-7.0.55
Using CATALINA_HOME:   /opt/apache-tomcat/apache-tomcat-7.0.55
Using CATALINA_TMPDIR: /opt/apache-tomcat/apache-tomcat-7.0.55/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/apache-tomcat/apache-tomcat-7.0.55/bin/bootstrap.jar:/opt/apache-tomcat/apache-tomcat-7.0.55/bin/tomcat-juli.jar
touch: cannot touch `/opt/apache-tomcat/apache-tomcat-7.0.55/logs/catalina.out': Permission denied /opt/apache-tomcat/apache-tomcat-7.0.55/bin/catalina.sh: line 385: /opt/apache-tomcat/apache-tomcat-7.0.55/logs/catalina.out: Permission denied


/opt/apache-tomcat/apache-tomcat-7.0.55/配下のフォルダのmodeは以下のとおり

drwxr-xr-x.  2 tomcat tomcat  4096 May 30 11:08 bin

drwxr-xr-x.  3 tomcat tomcat  4096 Jul 25 06:57 conf

drwxr-xr-x.  2 tomcat tomcat  4096 May 30 11:08 lib

-rw-r--r--.  1 tomcat tomcat 56812 Jul 18  2014 LICENSE

drwxr-xr-x.  2 tomcat tomcat 12288 Jul 27 00:04 logs -rw-r--r--.  1 tomcat tomcat  1192 Jul 18  2014 NOTICE

-rw-r--r--.  1 tomcat tomcat  8963 Jul 18  2014 RELEASE-NOTES

-rw-r--r--.  1 tomcat tomcat 16204 Jul 18  2014 RUNNING.txt

drwxr-xr-x.  3 tomcat tomcat  4096 Jul 27 00:19 temp

drwxr-xr-x. 11 tomcat tomcat  4096 Jun 23 23:54 webapps

drwxr-xr-x.  3 tomcat tomcat  4096 May 30 11:19 work

touchできないと言われるcatalina.outのmodeは以下のとおり

rw-r--r--. 1 tomcat tomcat 42084568 Jul 27 00:21 catalina.out


tomcatをサービスに登録した方法は以下のとおり

/etc/init.d/tomcat chmod +x tomcat chkconfig --add tomcat

登録できたことを確認 chkconfig --list tomcat tomcat          0:off 1:off 2:on 3:on 4:on 5:on 6:off


/etc/init.d/tomcatの中身

#!/bin/bash
# Startup script for the Tomcat Servlet Container
#
# chkconfig: 2345 35 65

export LANG=ja_JP.UTF-8

TOMCAT_HOME=/opt/apache-tomcat/apache-tomcat-7.0.55
LOCKFILE=/var/lock/subsys/tomcat

# source function library
. /etc/rc.d/init.d/functions

start(){
    if [ ! -f ${LOCKFILE} ]; then
        echo ""Starting tomcat""
        #sudo -u tomcat ${TOMCAT_HOME}/bin/startup.sh
        ${TOMCAT_HOME}/bin/startup.sh
        sleep 1
        PID=`ps -ef | grep catalina.home=${TOMCAT_HOME} | grep -v grep | awk '{print $2}'`
        echo ${PID} > ${LOCKFILE}


        tail -f ${TOMCAT_HOME}/logs/catalina.out | while read LINE
        do
          PID=`ps -ef | grep -v grep | egrep -e '.*tail.*catalina.out$' | awk '{print $2}'`
          if [ 1 -ne `echo $LINE | egrep -e '^.*: Server startup in [0-9]* ms$' | wc -l` ];
            then
            echo -n "".""
          else
            echo 
            echo $LINE 
            kill ${PID}
          fi
        done
    else
        echo ""tomcat is already running""
    fi
}

stop(){
    if [ -f ${LOCKFILE} ]; then
        echo ""Shutting down tomcat""
        #sudo -u tomcat ${TOMCAT_HOME}/bin/shutdown.sh
        ${TOMCAT_HOME}/bin/shutdown.sh
        while [ 1 -eq `ps -ef | grep ${TOMCAT_HOME} | grep -v grep | wc -l` ]
        do
          echo -n "".""
          sleep 1
        done
        echo 
        echo ""Shutted down tomcat""
        rm -f ${LOCKFILE}
    else
        echo ""tomcat is not running""
    fi
}

case ""$1"" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        #${TOMCAT_HOME}/bin/catalina.sh version
        if [ -f ${LOCKFILE} ]
        then
          echo ""tomcat(pid:""`cat ${LOCKFILE}`"") is running.""
        else
          echo ""tomcat is not running.""
        fi  
        ;;
    *)
        echo ""Usage: $0 {start|stop|restart|status}""
esac

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • moonphase

    2016/07/27 09:34

    サービスをどのユーザーからどのように起動しようとしてますか?

    キャンセル

  • leo_xxx

    2016/07/27 11:01

    起動
    service tomcat start

    停止
    service tomcat stop

    再起動
    service tomcat restart

    ステータス
    service tomcat status

    という感じでserviceコマンド自体を実行するユーザはrootでもtomcatでもないユーザです。

    キャンセル

回答 2

0

現象は logs に書き込み権限がないのでエラーになってますね。
手動でうまくいくのは sudo で tomcat らなってるから。
てっとり早いのは logs に書き込み権限を付与すること。
ただし、「それでいいか」は部外者からは判断できないでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/07/27 11:08

    #sudo -u tomcat ${TOMCAT_HOME}/bin/startup.sh
    の通り、tomcatユーザで実行しようとしているはずで、
    logのオーナーはtomcatユーザなのでなぜpermissionエラーになるのでしょう?という感じなのです。

    キャンセル

  • 2016/07/27 11:16 編集

    過去にtomcatユーザ以外でapache-tomcatを起動していて、 "catalina.out" のファイル自体のパーミッションが、root等(tomcatユーザではない)になっていませんか?
    後は、別の方が記載している、"${LOCKFILE}"の 権限を。
    また、ファイルが置かれるディレクトリまでの x 権限が不足していると、ダメです。

    キャンセル

  • 2016/07/27 11:23

    sudo で動かす場合は問題ないと書きました。
    そして、サービスで動かす場合は tomcat ユーザではないと書いてあります。
    混乱されてませんか?

    キャンセル

  • 2016/07/27 11:52

    先に書いたとおりcatalina.outのpermissionは以下のとおりです。
    rw-r--r--. 1 tomcat tomcat 42084568 Jul 27 00:21 catalina.out

    catalina.outへのtouchでコケているのでLOCKFILEはその先のような気がしますが、再度LOCKFILEの pathも確認してみます。

    キャンセル

  • 2016/07/27 13:13

    作成されていたLOCKFILEのオーナーがfooになっていました。
    実行スクリプトを書きなおしてみます。

    キャンセル

0

rootでもtomcatでもないユーザーfooで実行した場合、
logs ディレクトリ及び配下のファイルに対する書き込み権限、/var/lock/subsys/tomcatファイルへの書き込み権限を、ユーザーfooが書けるようにしてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/07/27 13:06

    確かにそうなのですが、それではtomcatユーザを作った意味がありません。
    起動スクリプトを実行するのがfooですが、起動スクリプト内では、
    #sudo -u tomcat ${TOMCAT_HOME}/bin/startup.sh
    でtomcatを起動しているつもりです。

    キャンセル

同じタグがついた質問を見る

  • CentOS

    3187questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Tomcat

    625questions

    TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。