以下の内容はhttps://yohei-a.hatenablog.jp/entry/20100224/1266976289より取得しました。


致命的: 持続されたセッションの保存中のIOExceptionです ... SESSIONS.ser (Permission denied)

Tomcat を停止しようとしたら停止しない*1ので、catalina.out を見てみると、

  • /usr/local/tomcat/logs/catalina.out
2010/02/24 10:11:25 org.apache.catalina.core.StandardService stop
情報: サービス Catalina を停止します
2010/02/24 10:11:25 org.apache.catalina.session.StandardManager doUnload
致命的: 持続されたセッションの保存中のIOExceptionです: java.io.FileNotFoundException: /usr/local/apache-tomcat-6.0.24/work/Catalina/localhost/_/SESSIONS.ser (Permission denied)
java.io.FileNotFoundException: /usr/local/apache-tomcat-6.0.24/work/Catalina/localhost/_/SESSIONS.ser (Permission denied)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
        at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:489)
        at org.apache.catalina.session.StandardManager.unload(StandardManager.java:463)
        at org.apache.catalina.session.StandardManager.stop(StandardManager.java:667)
        at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4611)
        at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:924)
        at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1319)
        at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1290)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:323)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1086)
        at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1098)
        at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:448)
        at org.apache.catalina.core.StandardService.stop(StandardService.java:584)
        at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
        at org.apache.catalina.startup.Catalina.stop(Catalina.java:643)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.stop(Bootstrap.java:301)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.commons.daemon.support.DaemonLoader.stop(DaemonLoader.java:200)

なんかパーミッションがないって怒られてる。
所有者が tomcat ユーザ以外のディレクトリ・ファイルがないか調べてみると、

# find /usr/local/tomcat/ -ls|perl -lane 'print "$F[4] $F[5]"'|sort -u
root root
tomcat tomcat

root になってるのがあるので、どのファイルか調べてみる。

# find /usr/local/tomcat/ -ls|perl -lane '$F[4] ne q/tomcat/ and print'
6521459    8 -rw-------   1 root     root           81  129 18:18 /usr/local/tomcat/work/Catalina/localhost/examples/SESSIONS.ser
6521454    8 -rw-------   1 root     root           81  129 18:18 /usr/local/tomcat/work/Catalina/localhost/_/SESSIONS.ser
6521458    8 -rw-------   1 root     root           81  129 18:18 /usr/local/tomcat/work/Catalina/localhost/docs/SESSIONS.ser

これらのファイルの所有者を tomcat:tomcat に変更して、

# find /usr/local/tomcat/ -ls|perl -lane '$F[4] ne q/tomcat/ and print $F[10]'|xargs -n1 chown tomcat:tomcat

変更されたことを確認する。

# find /usr/local/tomcat/ -ls|perl -lane 'print "$F[4] $F[5]"'|sort -u
tomcat tomcat

念のため、tomcat を再起動し、root権限のファイルが作成されないことを確認する。

# /etc/init.d/tomcat stop
# /etc/init.d/tomcat start
# find /usr/local/tomcat/ -ls|perl -lane 'print "$F[4] $F[5]"'|sort -u
tomcat tomcat

おk!

ところで、SESSIONS.ser ってなんだ?

Absolute or relative (to the work directory for this Context) pathname of the file in which session state will be preserved across application restarts, if possible. The default is "SESSIONS.ser". See Restart Persistence for more information. Restart persistence may be disabled by setting this attribute to an empty string.

Apache Tomcat Configuration Reference - The Manager Component

*1:ps で確認するとプロセスが残っている




以上の内容はhttps://yohei-a.hatenablog.jp/entry/20100224/1266976289より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14