最近のFreeBSDでは/tmpディレクトリの中身を定期的に掃除してくれない設定がデフォルトのようです。設定を変更して古いファイルを削除するようにしましょう。
periodic.confファイルで指定
/etc/periodic.confファイルに次の一文を加えればOK。もしファイルが存在しなければ新規作成しましょう。
daily_clean_tmps_enable="YES"
これで/tmpディレクトリ下にある3日以上前の一時ファイルが毎朝削除されるようになります。もしも違うディレクトリで実行したければ以下も合わせて追記します。複数指定したい場合は半角スペースで区切って羅列します。
daily_clean_tmps_dirs="/tmp"
また残したい日数を変更したい場合は以下を追記して日付を書き換えます。
daily_clean_tmps_days="3"
これで明日以降、古い一時ファイルがどんどん削除されるようになります!
デフォルト設定は/etc/defaultsにある
実際の動作を少し細かく説明すると、先ほど指定した内容はデフォルトの設定値が書き込まれている/etc/defaults/periodic.confの値を上書きしています。
一時ファイル削除に関するデフォルト値はこのようになっています。
# 110.clean-tmps
daily_clean_tmps_enable="NO" # Delete stuff daily
daily_clean_tmps_dirs="/tmp" # Delete under here
daily_clean_tmps_days="3" # If not accessed for
daily_clean_tmps_ignore=".X*-lock .X11-unix .ICE-unix .font-unix .XIM-unix"
daily_clean_tmps_ignore="$daily_clean_tmps_ignore quota.user quota.group .snap"
daily_clean_tmps_ignore="$daily_clean_tmps_ignore .sujournal"
# Don't delete these
daily_clean_tmps_verbose="YES" # Mention files deleted
2行目のdaily_clean_tmps_enableの値を”YES”にすると、一時ファイルが削除されるようになります。デフォルトに設定されているディレクトリや日数を上書きすれば細かくふるまいを変えることができます。
なお、設定ファイル先頭にコメントされているように直接/etc/defaults/periodic.confファイルを書き換えてはいけません。periodicコマンドは/etc/periodic.confで指定された値優先で動くので、デフォルト設定ファイルを編集する必要はありません。
また、この設定ファイルを読めば日毎だけでなく週毎、月毎にどんなことが設定できるかがわかります。
periodicコマンドのふるまい
periodicコマンド自身はcronに呼び出されて日毎/週毎/月毎にシェルスクリプトを定期実行します。
# Perform daily/weekly/monthly maintenance.
1 3 * * * root periodic daily
15 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly
うちの/etc/crontabの設定では日毎が毎朝3時1分、週毎が毎土曜日の朝4時15分、月毎が毎月1日の朝5時30分に実行されるようになっていました。
periodicに渡される引数はスクリプトの入ったディレクトリですが、crontabにあるように絶対パス指定になっていない場合は/etc/periodic下にあるものとして解釈され、指定ディレクトリ内にある実行属性の付いたスクリプトを片っ端から実行してゆきます。
実際に/etc/periodic/dailyの中を覗いてみると、拡張子こそ.shではないものの実行属性のついたファイルがたくさんあります。
$ ll
total 128
drwxr-xr-x 2 root wheel 1024 Jul 21 2017 .
drwxr-xr-x 6 root wheel 512 Jul 21 2017 ..
-rwxr-xr-x 1 root wheel 1285 Jul 21 2017 100.clean-disks
-rwxr-xr-x 1 root wheel 1577 Jul 21 2017 110.clean-tmps
-rwxr-xr-x 1 root wheel 1097 Jul 21 2017 120.clean-preserve
~(中略)~
-rwxr-xr-x 1 root wheel 728 Jul 21 2017 500.queuerun
-rwxr-xr-x 1 root wheel 836 Jul 21 2017 510.status-world-kernel
-rwxr-xr-x 1 root wheel 2808 Jul 21 2017 800.scrub-zfs
-rwxr-xr-x 1 root wheel 802 Jul 21 2017 999.local
これらのシェルスクリプトが実行されると/etc/defaults/periodic.confや/etc/periodic.confの設定内容に沿ってコードが実行されるという仕組みです。
こんな感じで定期実行コマンドで一時ファイルが削除されるのです。