Debian/Ubuntu の Tomcat9 は systemd によってサンドボックス化されている
下記は、無料のグループウェア「GroupSession」を Ubuntu 20.04 で動かした時のエラー。
java.lang.Exception: Unable to configure AvalonLogSystem : java.io.FileNotFoundException: /var/lib/tomcat9/velocity.log (Read-only file system)
/var/lib/tomcat9/velocity.log
に書き込み権限がないと怒られた。
原因は Tomcat9 をサンドボックス内で動作させているためらしい。
アクセス権限まわりを変えても動かないので原因特定に苦労した。
厳密に言うと Debian/Ubuntu の apt で取得した tomcat9 の話ですが、
Ubuntu × apt × tomcat9 の掛け合わせで検索したので特定が難しかった。
さらに言い訳ですが、ローカルVMの Ubuntu Server 20.04.2 LTS ではエラーが出なくて、
GCP の Ubuntu 20.04 minimal でエラーが出たので余計に手間が掛かった気がする。
Debian ならたどり着くのがもっと早かった説。
対処方法
debian/README.Debian · master · Debian Java Maintainers / tomcat9 · GitLab
Debian公式の記載がありました。
Ubuntu は Debian の派生ディストリビューションなので、同じ apt の tomcat9 になる。
ディレクトリ /etc/systemd/system/tomcat9.service.d/
を作成し、
その中にファイル override.conf
を作成します。
mkdir /etc/systemd/system/tomcat9.service.d touch override.conf
- [override.conf] の内容を記述する
[Service] ReadWritePaths=/path/to/the/directory/
GroupSessionではとりあえず
[Service] ReadWritePaths=/var/lib/tomcat9/
としてみました。
ログ出力だけなら WritePaths=/var/lib/tomcat9/
でよい気もします。
最後にサービスの再起動をします。
systemctl daemon-reload systemctl restart tomcat9