概要
Linux系OSの一部では、/tmpや/var/tmp以下のファイルが一定時間経過すると削除される設定がされていることがあります。実際に、/tmpをテンポラリー用途じゃないファイル配置場所として使用していたら、ファイルが消えて焦りました。。。
そこで、この設定の確認方法と無効化の方法を記事にしてみました。
ちなみに、Red Hat Enterpriseで、この現象が発生するのを確認しました。その他、Cent OSの6と7でも発生するみたいですね。
ただし、LinuxのFHS(Filesystem Hierarchy Standard)では、そもそも/tmpは一時的なファイル配置場所にしか使っていけないことになっています。だからこそ、削除されるように設定されていたりします。そのため、この規約に従えば、設定を変更するのではなく、そもそも削除されて困るようなファイルを長時間置かないことが正しいアプローチとなります。
とはいえ、そうは言ってはいられない事情もあると思うので、記事にしました。
以下の通り、Systemdかcron(tmpwatch)のどちらかの仕組みでファイルの定期削除がされるようです。どちらで設定されているか順番に確認してみてください。
(OSによっては下記以外の仕組みで設定されていることもあるかもしれません。)
1. Systemdの設定
Linuxの起動管理・システム管理のSystemdに削除設定がされていないか確認してみます。
確認方法
/usr/lib/tmpfiles.d/tmp.confを確認して、以下のような記述がないか確認します。
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d
無効化方法
上記ファイルをコピーして、/etc/tmpfiles.dに作成して、削除の例外設定を追記します。
/usr/lib以下のファイルを直接書き換えることは非推奨のため、このようにします。/etc/tmpfiles.d/での設定は、/usr/lib/tmpfiles.d/以下の設定より優先されます。
$ cp -a /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d/
# 下記を追記(xで例外指定となる)
x /tmp/*
x /var/tmp/*
2. cron.daily(tmpwatch)の設定
こちらはcronの設定です。古いCent OSなどはこちらのようです。
確認・無効化方法
/etc/cron.daily/tmpwatch内で、下記のように削除する処理を記載している箇所がないか確認します。tmpwatch
が該当ディレクトリ内のファイル定期削除を行っています。削除設定を無効化する場合は、下記の処理をコメントアウトします。
/usr/sbin/tmpwatch 240 /tmp
/usr/sbin/tmpwatch 240 /var/tmp
最後に
Linux系OSでは、ここで紹介したケース以外にも、ファイルの定期削除やシャットダウン時のファイル削除設定がされている場合があります。大切なファイルを失わないためにも、OS導入時に最初に確認しておきたいですね。
参考
CentOS 7 : /var/run 直下に作ったディレクトリが消えないようにする