現象
- 週1or2でJettyが内部エラー起こしてリクエストに404エラーを返す
- エラー発生は決まって週末の同じ時間
解析
参考
- warファイルからお手軽起動したGitBucketの画像やCSSがなくなる | 眠るシーラカンスと水底のプログラマー
- gitbucketというOSSソフトがあるのだが、これも同じような現象が起きてたらしい
概要
- Jettyは無指定だと/tmp以下に公開しているwarファイルのコピーをキャッシュとして展開する
- tmpwatchはAmazon LinuxやCentosに標準でインストールされていて、/tmpにあるファイルを定期的に削除する*1
・/usr/sbin/tmpwatch 240 /tmp /tmp/下で240時間アクセスが無いファイルを削除する ・/usr/sbin/tmpwatch 720 /var/tmp /var/tmp/下で720時間アクセスが無いファイルを削除する ・/var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?} /var/cache/man/、/var/cache/catman/下で720時間アクセスがないファイルを削除する
- /tmpに展開されたキャッシュファイルが削除されると、Jettyは異常な状態になった
解決策
You have few choices.
(取れる選択肢はあんまりない。)1) Specify your own java.io.tmpdir java system property location for jetty to use.
$ java -Djava.io.tmpdir=/path/to/my/new/temp/ -jar start.jar(① Jettyが使用するjava.io.tmpdirのシステム設定の場所を指定する
$ java -Djava.io.tmpdir=/path/to/my/new/temp/ -jar start.jar)
2) Create a "work" directory under the ${jetty.home} path (whereever that is).
That will cause Jetty to use that work directory instead of whatever the java.io.tmpdir property is set to.(② "work"という名前のディレクトリを ${jetty.home} の下に作る。
これによりJettyはjava.io.tmpdirにどんなものが設定されていてもworkディレクトリを使用するようになる。)
*1:tmpwatchというサービスを知らなかった…