TomcatのsafeToDelete.tmpの謎を追う

「TomcatのtempディレクトリにあるsafeToDelete.tmpというファイルは何ですか?」

こんな質問をされたので、少し調べてみました。

※大げさなタイトルですが、超小ネタです。

ぱっと手元にあるTomcatを確認したところ、確かに、tempディレクトリの下にはsafeToDelete.tmpという空のファイルができています。バージョン6.0でも7.0でも8.0でもこの空のファイルがあります。保存されているディレクトリ名とファイル名から判断すると、削除したところで問題が無いことは推測できるのですが、これは一体??

ということで、まずは”safeToDelete.tmp”でググってみました。が、イマイチそれらしい答えが見つからず。

まあ、Tomcatのガイドに書いてあるだろうと、今後は「safeToDelete.tmp site:tomcat.apache.org」とサイト内検索でググってみましたが、結果はゼロ。

こうなると、ソースコードを調べた方が速そうなので、「safeToDelete」でソースコード全体をgrep。すると、ヒットはしたのですが、dist.xmlに以下の1行があるだけ…

<touch file="${tomcat.dist}/temp/safeToDelete.tmp" />

dist.xmlはantでTomcatをビルドする際に読み込まれるファイルで、これをもとにantは空のファイル(safeToDelete.tmp)を作成(touch)しているだけです。作成しているものの、どこからも参照されていないこのファイルに何の意味があるのでしょうか。このファイルが作成されるようになった過去の経緯を知らないと、存在意義は分からなそうです。

ということで、いつからのこのファイルがあるのか調べてみると、Tomcat 5.0.28には入っていませんでした。Tomcat 5.5.36を調べてみると、bugzilla37035-safeToDelete.tmpというファイルがありました…あ、そゆこと…

ということで、bugzillaでid=37035を検索すると、ありました。
https://bz.apache.org/bugzilla/show_bug.cgi?id=37035

Windowsの解凍ツールWinZIPでTomcatのtar.zpファイルを解凍したときに、もともとあった空のtempディレクトリが消えてしまう、というバグ(?)でした…

WinZIPの問題であって、対策すべきではないのでは?対策の仕方も…

そして、次の疑問が。logsやworkなどの空ディレクトリはなぜ、この対策をしなかったのか?tempディレクトリはサーブレットの仕様で規定されているから?深追いするような問題では無いので、この辺りで調査は切り上げます。

広告