#前提
・tomcat-8.5.68
・CentOS Linux release 7.5.1804
#自作ユニット定義ファイルでの自動起動ができない
https://weblabo.oscasierra.net/installing-tomcat8-centos7-1/
上記サイトを参考にしながら、構築したが、ユニット定義ファイル作成しても、自動起動ができなかったので、メモ。
[Unit]
Description=Tomcat service created by my own
After=network.target
ConditionPathExists=/usr/local/tomcat9
[Service]
User=tomcat
Group=tomcat
Type=oneshot
#PIDFile=/opt.apache-tomcat-8.5.68/tomcat.pid
RemainAfterExit=yes
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomat9/bin/shutdown.sh
#ExecRestart=/usr/local/tomcat9/bin/shutdown.sh;/usr/local/tomcat9/bin/startup.sh
Restart=no
[Install]
WantedBy=multi-user.target
tomcatユーザに起動してもらうので、tomcat実行ファイル群の所有者をroot⇒tomcatに変更。
*rootを所有者にしたまま、実行権限を付与してもダメだった。
[root@client local]# pwd
/usr/local
[root@client local]# ls -l
total 10312
drwxr-xr-x. 9 tomcat tomcat 220 Jul 3 04:21 apache-tomcat-8.5.68
-rw-r--r--. 1 root root 10559131 Jul 3 04:20 apache-tomcat-8.5.68.tar.gz
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 libexec
drwxr-xr-x. 2 root root 6 Apr 11 2018 sbin
drwxr-xr-x. 5 root root 49 Apr 24 12:05 share
drwxr-xr-x. 2 root root 6 Apr 11 2018 src
lrwxrwxrwx. 1 root root 20 Jul 3 04:33 tomcat9 -> apache-tomcat-8.5.68
[root@client local]#
ただこれでもダメで、最終的にjournalctl-xeを見ると、
startup.sh[30325]: /usr/local/tomcat9/bin/catalina.sh: line 504: /usr/local/tomcat9/logs/catalina.out: Permission denied
となっており、どうやら/usr/local/tomcat9/logs/catalina.outというファイルへのpermission denyになっている。
確かに見ると、こいつだけrootが所有者になっていて、tomcatユーザは権限が足りていなかった(実行後、生成されるファイル?のため、所有者変更が効いてなかった?)ので、付与すると、とりあえずsystemctl start tomcatで実行可能に。
#JSP file [/index.jsp] not foundエラー
ただ、そのあとに上記エラーが発生。
しかしながら、"http://localhost:8080" にアクセスすると上記エラーが出ることを確認。
しかし、以下のディレクトリにアクセスするときちんと表示される。
"http://localhost:8080/examples"
つまり、最初の猫のページにアクセスしようとしたときにエラーメッセージに記載の通り、index.jspがないから、表示されていないようだ。
じゃあindex.jspってどこだ。
以下を参考にした。
引用:https://searchman.info/java_eclipse/1030.html
URLは、以下ですね。
http://localhost:8080/examples/servlets/servlet/HelloWorldExampleこのURLのクラスは、以下のディレクトリにあります。
C:\tomcat9\webapps\examples\WEB-INF\classes \HelloWorldExample.class
つまり、\tomcat9\webappsにindex.jspがあればいいのか。
ダメだった。
./startup.shでtomcatを実行した場合、きちんと猫のページが表示される。
ということはやっぱりsystemctl start [ユニット]での実行時のミスがあるよう。
どうやら./startup.shを実行したときいくつかの環境変数が定義されているようだ。
その./startup.shを実行した際に定義されるJRE_HOMEとCATALINA_HOMEを/etc/profileに追記して、
改めて実行してみたが、変化なし。
/apache/logsの中身を見て切り分けを進めた。
…どうやらtomcat内の権限が足りなかったみたい。
参考:
tomcatをインストールしたディレクトリ全体の所有者と所有グループをtomcat:tomcatにしていた。
さらにtomcat配下webapps内の権限を755⇒775にしたらいけた。
(ただ、web閲覧時ってtomcatを動かしたユーザで各ファイル群にアクセスするはず。
もともと所有者においては7の権限を付与していたはずだが。。。?)
ということで、少し腑に落ちない部分はあるが、自作ユニット定義ファイルでのtomcat自動起動をしたい場合は、以下の観点で調べてあげればいいかもしれない。
・tomcat実行ファイル群の所有者:所有グループを起動者:起動グループにする(今回の場合、tomcat:tomcat)
・logs/catalina.outというファイルも上と同様の権限を与える
・さらにtomcatディレクトリ内webapps内の権限を所有グループについてもフルコントロールを与える