web-dev-qa-db-ja.com

/ tmpディレクトリはどのようにクリーンアップされますか?

/tmpディレクトリはどのようにクリーンアップされますか?自動ですか?ある場合、どれくらいの頻度でクリーンアップされますか?

296
Olivier Lalonde

注意!少なくとも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で定義された環境変数です。

188
lesmana

TMPTIMEはデフォルトで0であるため、ディレクトリはブート時にデフォルトでクリアされます。

ここでは、次のファイルで時間を変更できます。

/etc/default/rcS

TMPTIMEは、tmpディレクトリが日単位でクリアされる頻度を示します

139
Max Ruf

/tmpフォルダーはファイルを長期間保存する場所ではありませんが、Ubuntuシステムのデフォルトである次回再起動よりも少し長くしたい場合があります。テスト中に/tmpに何かをダウンロードし、変更を加えてから再起動し、元のデータを再度失ったことを知っています。 /tmpファイルをもう少し長くしたい場合は、これを変更できます。

/tmpクリーンアップ頻度の変更

再起動時に/tmpをクリアするようシステムに指示するデフォルト設定は、/etc/default/rcSファイルに保持されています。調べる値はTMPTIMEです。

TMPTIME=0の現在の値は、ファイルの経過時間にかかわらず、再起動時にファイルを削除することを示しています。この値を別の(正の)数値に変更すると、/tmpでファイルが存続できる日数が変更されます。

TMPTIME=7

この設定により、ファイルは1週間経過するまで/tmpに残り、次の再起動時に削除されます。負の数(TMPTIME=-1)は、/tmp内の何も削除しないようにシステムに指示します。これはおそらくあなたが望むものではありませんが、利用可能です。

63
hhlp

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ページは詳細がほとんど理解できない。

新しいセットアップの利点は、システムが再起動しなくてもファイルクリーナを実行できることです(常時接続サーバーの場合など)。それは大きなプラスだと思います。

44
pauljohn32

Ubuntu 14.04では、これは tmpreaper によって行われ、cronによって毎日呼び出されます(/etc/cron.dailyから)。プログラムは、/etc/default/rcSおよび/etc/tmpreaper.confを介して構成できます。

26

14.04より前:

再起動するたびにクリーンアップされます。

10
Utku Demir

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 を参照)。

7
muru

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サーバーであるため、明らかな理由で再起動する必要はありません。

5
Paul