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

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

新規登録して質問してみよう
ただいま回答率
85.44%
CentOS

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

Tomcat

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

Q&A

2回答

24021閲覧

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

leo_xxx

総合スコア13

CentOS

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

Tomcat

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

0グッド

0クリップ

投稿2016/07/27 00:31

・環境
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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moonphase

2016/07/27 00:34

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

2016/07/27 02:01

起動 service tomcat start 停止 service tomcat stop 再起動 service tomcat restart ステータス service tomcat status という感じでserviceコマンド自体を実行するユーザはrootでもtomcatでもないユーザです。
guest

回答2

0

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

投稿2016/07/27 02:04

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leo_xxx

2016/07/27 04:06

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

0

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

投稿2016/07/27 00:42

takasima20

総合スコア7460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leo_xxx

2016/07/27 02:08

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

2016/07/27 02:18 編集

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

2016/07/27 02:23

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

2016/07/27 02:52

先に書いたとおりcatalina.outのpermissionは以下のとおりです。 rw-r--r--. 1 tomcat tomcat 42084568 Jul 27 00:21 catalina.out catalina.outへのtouchでコケているのでLOCKFILEはその先のような気がしますが、再度LOCKFILEの pathも確認してみます。
leo_xxx

2016/07/27 04:13

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問