/tmp
ディレクトリはどのようにクリーンアップされますか?自動ですか?ある場合、どれくらいの頻度でクリーンアップされますか?
注意!少なくともubuntu 14.04以降、この答えは時代遅れです。現在の状況に関する他の回答を参照し、それらが正しいと判明した場合は、猛烈に支持してください。また、ここに現在の正解へのリンクを配置できるようにコメントを投稿してください。
14.04については https://askubuntu.com/a/759048/1366 を参照
16.10については https://askubuntu.com/a/857154/453746
2011年の古い回答:
/tmp
のクリーニングは、upstartスクリプト/etc/init/mounted-tmp.conf
によって行われます。スクリプトは、/tmp
がマウントされるたびにupstartによって実行されます。実際には、すべての起動時に意味します。
このスクリプトはおおよそ次のことを行います。/tmp
内のファイルが$TMPTIME
日より古い場合、そのファイルは削除されます。
$TMPTIME
のデフォルト値は0です。つまり、/tmp
内のすべてのファイルとディレクトリが削除されます。 $TMPTIME
は、/etc/default/rcS
で定義された環境変数です。
TMPTIME
はデフォルトで0であるため、ディレクトリはブート時にデフォルトでクリアされます。
ここでは、次のファイルで時間を変更できます。
/etc/default/rcS
TMPTIME
は、tmpディレクトリが日単位でクリアされる頻度を示します
/tmp
フォルダーはファイルを長期間保存する場所ではありませんが、Ubuntuシステムのデフォルトである次回再起動よりも少し長くしたい場合があります。テスト中に/tmp
に何かをダウンロードし、変更を加えてから再起動し、元のデータを再度失ったことを知っています。 /tmp
ファイルをもう少し長くしたい場合は、これを変更できます。
/tmp
クリーンアップ頻度の変更
再起動時に/tmp
をクリアするようシステムに指示するデフォルト設定は、/etc/default/rcS
ファイルに保持されています。調べる値はTMPTIME
です。
TMPTIME=0
の現在の値は、ファイルの経過時間にかかわらず、再起動時にファイルを削除することを示しています。この値を別の(正の)数値に変更すると、/tmp
でファイルが存続できる日数が変更されます。
TMPTIME=7
この設定により、ファイルは1週間経過するまで/tmp
に残り、次の再起動時に削除されます。負の数(TMPTIME=-1
)は、/tmp
内の何も削除しないようにシステムに指示します。これはおそらくあなたが望むものではありませんが、利用可能です。
Ubuntu 16.10でこれを確認しています。/etc/default/rcSを編集してもまったく効果がなく、tmp内のファイルは、そのファイルに何を入れても再起動によって消去されることを証明できます。他の人が言及するように、tmpreaperは使用されなくなりました。
正しい答えは、Ubuntu 16.10に新しいセットアップがあるということです。フォルダー/etc/tmpfiles.dがあり、マニュアルページ「tmpfiles.d」に記載されています。そのフォルダーに、/ tmpを消去するかどうかを制御する構成ファイルを配置する必要があります。これは、20日経過していない限り、/ tmp内のファイルを消去するリブートを停止するために行っていることです。
#/etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 20d
ファイルを削除したくない場合は、「20d」を「-」に置き換えます。これは私の最善の努力であり、そのmanページは詳細がほとんど理解できない。
新しいセットアップの利点は、システムが再起動しなくてもファイルクリーナを実行できることです(常時接続サーバーの場合など)。それは大きなプラスだと思います。
Ubuntu 14.04では、これは tmpreaper
によって行われ、cronによって毎日呼び出されます(/etc/cron.daily
から)。プログラムは、/etc/default/rcS
および/etc/tmpreaper.conf
を介して構成できます。
再起動するたびにクリーンアップされます。
systemd
Ubuntu(15.10以降)では、これは、systemd-tmpfiles-clean
サービスとタイマーを使用してsystemdによって実行されます。
$ systemctl cat systemd-tmpfiles-clean.service
# /lib/systemd/system/systemd-tmpfiles-clean.service
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle
そして
$ systemctl cat systemd-tmpfiles-clean.timer
# /lib/systemd/system/systemd-tmpfiles-clean.timer
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
したがって、systemd-tmpfiles-clean
はシャットダウン時に実行され、そうでない場合は1日に1回実行されます。 別の回答 で言及されている/etc/tmpfiles.d
を使用して、クリーンアップするファイルを拡張できます。
systemctl edit systemd-tmpfiles-clean.timer
およびさまざまなsystemd Timer
構成オプションを使用して、タイマーの動作自体を変更できます( man 5 systemd.timer
を参照)。
Ubuntuを実行しているサーバーの1つには、/ tmp内のファイルを削除するスクリプトがあり、夜間に実行されます。
スクリプトは次のとおりです。
#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly
/usr/bin/find /tmp -type f -atime +2 -mtime +2 |xargs /bin/rm -f &&
/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&
/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&
/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;
上記の内容をファイルに保存して、ファイルをchmod 775し、cronエントリを作成して実行します。これはWebサーバーであるため、明らかな理由で再起動する必要はありません。