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


300

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


15
一時ファイルがディスクに書き込まれることはありません。RAMディスクに書き込まれます。tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstabに入れました。
匿名

回答:


192

注意!少なくとも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


14.04には当てはまりません(スクリプトはもう存在しません)。
マーティンシュレーダー

@MartinSchröder-スクリプトはシステムに存在し、14.04のクリーンインストールであり、tmpreaperは存在しません!
ランスオランダ

現在、arch linuxを使用しているため、確認できません。ごめんなさい。誰かがこれを確認し、私の答えをコメントするか編集してください。
レスマナ

4
Ubuntuので16.04 tmpreaperがアンセキュアなように放棄されて参照してください。fossies.org/linux/tmpreaper/debian/README.securityを
tamerlaha

1
いいえ。Ubuntu16.04では、systemdメカニズムに置き換えられています。その文書を読んでください。実際に見つかるのは、なぜ安全でないと主張するセキュリティ分析に欠陥があるのか​​の説明です。
JdeBP

141

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

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

/etc/default/rcS

TMPTIME tmp dirが日単位でクリアされる頻度


9
ブートのたびにクリアすることは、サーバーのようにリブートされないマシンには理想的ではありません。サーバーの稼働時間は378日間であるため、/ tmpに5Gbのスペースを取る500,000を超えるファイルがあります。再起動時にこれらのファイルをクリアすると数時間かかるため、再起動するのは嫌です。
-rjmunro

10
あなたの場合tmpreaper、チャンスを与えるべきです。
qbi

1
CRONジョブはそれを簡単に解決できます。
ケンシャープ

またtmpwatch、適切なツールである必要があります。
-ArekBulski

1
Ubuntu / systemdはすでにソリューションを提供しているようです。もっと言いたいのですが... systemd。
ケンシャープ

65

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

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

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

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

TMPTIME=7

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


1
良い説明。しかし、クリーンアップコマンドはどのスクリプトにありますか?私は見ました/etc/init/mounted-temp.confが、それはstart on mounted MOUNTPOINT=/tmp私がそれを適用外であると思うようにする行を持っています。
-enzotib

7
ファイルを自動的に削除したくない場合は、の/var/tmp代わりにファイルを入れてください/tmp
ジル

1
また、おそらくOOMが原因でマシンがクラッシュしたときに、失いたくないファイル(レンダリングされたビデオフレーム)を保持しておくと便利です。もちろん、より良い解決策は問題を修正することです。:
ケンシャープ

これはCygwin内で実行できますか?
CMCDragonkai

46

Ubuntu 16.10でこれを確認しています。/ etc / default / rcSを編集してもまったく効果がなく、tmp内のファイルは、そのファイルに何を入れても再起動によって消去されることを証明できます。他の人が言及するように、tmpreaperは使用されなくなりました。

正しい答えは、Ubuntu 16.10に新しいセットアップがあるということです。フォルダー/etc/tmpfiles.dがあり、manページ「tmpfiles.d」に記載されています。そのフォルダーに、/ tmpを消去するかどうかを制御する構成ファイルを配置する必要があります。これは、20日経過していない限り、/ tmp内のファイルの消去からリブートを停止するために行っていることです。

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

ファイルを削除したくない場合は、「20d」を「-」に置き換えます。これは私の最善の努力であり、そのmanページは詳細がほとんど理解できません。

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



私はあなたがハイフンを使用して、元のファイルのアクセス権と所有者を保つことが分かっ:d /tmp/ - - - 20d
デイブYarwood

2
また、注目に値する:手動でクリーニングジョブを実行して設定をテストすることができますsystemctl start systemd-tmpfiles-clean
デイブYarwood

@ pauljohn32は、16.10以降のバージョンにも当てはまりますか?
kapad

3
@kapad:これがUbuntu 18.04でも機能することを確認しました。
ジーンビンセント

26

Ubuntu 14.04ではtmpreaper、これはによって行われ、cronから毎日呼び出されます(から/etc/cron.daily)。プログラムは、経由で設定することができる/etc/default/rcS/etc/tmpreaper.conf


私のシステムでは、tmpreaperは/etc/cron.dailyにありませんでしたが、apt-getでインストールできました
Joe Germuska

10

14.04より前:

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


14.04以降で表示され、tmpreaperのみを使用し、「per boot」スクリプトFWIW
rogerdpack

14.04システムはすべて、再起動時にクリーンアップされます。聞いたこともないtmpreaper
ケンシャープ

システムを再起動しないとどうなりますか?
phuclv

7

systemdUbuntu(15.10以降)、これを使用して、systemdにすることによって行われsystemd-tmpfiles-cleanたサービスとタイマーを:

$ 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)。


タイマーを20分に変更しましたが、statusコマンドで実際に20分構成を使用していることがわかります。しかし、私の問題は/tmpまだクリーンアップされていないことです。そして、私はそれをきれいにする必要があります。手動で開始sudo systemctl start systemd-tmpfiles-cleanしてもうまくいきません。なぜアイデアがありますか?
user2932688

5

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


6
tmpwatchを使用した方が良いかもしれません。
プーリー

9
最後の行は非常に危険です。通常は、誰もが実行することができますln -s /usr /tmp/kaboomでもかln -s /* /tmp/...
ダニエル・アルダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.