Ubuntu環境、Javaのバージョンを上げた際のTomcatのエラー修正。
tomcat.serviceでTomcat独自のJAVA_HOMEの設定。
関連ページ
参考URL
前ページ
からの続き。
先日PCを買い替えて、しばらくは問題なく記事を更新できていた。
しかしサーブレットをWindows側でビルドしてサーバにアップした所、急に503エラーが出るようになった。
直感的にUbuntu上のjavaとWindows側のjavaのバージョン違いが原因だと推測はできたので、すぐ両方をjdk-21に統一した。
ところがそれでも解決できない。
問題個所の特定
まずUbuntu、Windows両方でjava -versionを入力し、お互いのバージョンを確認。
両方とも日付まで全く一緒のJavaが表示された。
openjdk version "21.0.2" 2024-01-16
ここからsudo service tomcat restartを実行し、HPを開いてみるが繋がらない。何度試しても503エラーになる。
もしかしてjdk-21が新しすぎて対応してないのではないかと思い、jdk-17に統一したり、jdk-13に統一してみたりしたが駄目だった。
最終的にはPCを買い替える前の、普通に運営できてた頃のjdk-11に戻してようやくHPが表示されるようになった。
色々調べてみて、Ubuntuのシステム上で選択しているJavaは、Tomcatでは何の関係もないことが分かった。
Ubuntu環境下のTomcatでは
/etc/systemd/system/tomcat.service
というファイルで、JAVA_HOMEを独自に設定しそれを使っている。
tomcat.serviceを編集
まずviでtomcat.serviceの中身を確認してみる。
sudo vi /etc/systemd/system/tomcat.servic
中では6個ぐらいのEnvironmentが設定されていて、その中にJavaに関する設定があるはず。
自分の場合、ここでjdk-11が明示的に指定されていた。
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
とりあえずこれを21に変更して保存。
Environment="JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64"
リセットのためsudo service tomcat restartを実行すると、謎の警告文が出てくる。
Warning: The unit file, source configuration file or drop-ins of tomcat.service changed on disk. Run 'systemctl daemon-reload' to reload units.
どうやらTomcatの設定を変えたんだから、
systemctl daemon-reload
を実行しろと言っているようだった。
言われた通り実行してみる。
今度は認証対象を選択しろみたいな文が出てきた。
====
AUTHENTICATING
FOR
org.freedesktop.systemd1.reload-daemon
===
Authentication
is
required
to
reload
the
systemd
state.
Multiple
identities
can
be
used
for
authentication:
1.
,,,
(
[ユーザー名]
)
2.
tomcat
Choose
identity
to
authenticate
as
(1-2):
2
Password:
====
AUTHENTICATION
COMPLETE
===
1.の塗りつぶし部分はユーザー名が入っていて、なんか関係なさそうだったので2.のtomcatを選択してEnter。
この後再度sudo service tomcat restartをすると無事通った。
HPも正常に見れるようになってようやく解決。
0
0