如何/tmp
清理目录?它是自动的吗?如果是这样,它多久清理一次?
如何/tmp
清理目录?它是自动的吗?如果是这样,它多久清理一次?
Answers:
注意!从至少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目录的频率
tmpreaper
个机会。
tmpwatch
应该是一个合适的工具。
虽然该/tmp
文件夹不是长期存储文件的位置,但有时您希望将其保留的时间比下次重新引导的时间长一点,这是Ubuntu系统上的默认设置。我知道/tmp
在测试过程中有一两次,我已经下载了一些东西,进行更改后重新启动,然后又丢失了原始数据。如果您想将/tmp
文件保留更长的时间,可以更改此设置。
更改/tmp
清理频率
该文件中包含告诉您的系统/tmp
在重新引导时清除的默认设置/etc/default/rcS
。我们将看的值是TMPTIME
。
TMPTIME=0
不管文件的使用期限如何,在重新引导时删除文件的当前值。将此值更改为其他(正)数字将更改文件可以生存的天数/tmp
。
TMPTIME=7
此设置将允许文件保留/tmp
到一个星期之前,然后在下次重新启动时将其删除。负数(TMPTIME=-1
)告诉系统不要删除中的任何内容/tmp
。这可能不是您想要的,但是可以使用。
/etc/init/mounted-temp.conf
,但是它的线条start on mounted MOUNTPOINT=/tmp
使我认为它不适用。
/var/tmp
而不是/tmp
。
我正在Ubuntu 16.10上进行检查。我可以证明,编辑/ etc / default / rcS根本不再起作用,并且无论您放入该文件什么内容,tmp中的文件都会通过重新启动来清除。正如其他人提到的那样,不再使用tmpreaper。
我认为正确的答案是Ubuntu 16.10具有新的设置。在手册页“ tmpfiles.d”中有一个文件夹/etc/tmpfiles.d。在该文件夹中,应该放置一个配置文件来控制是否要删除/ tmp。这是我要停止重启以擦除/ tmp中的文件的方法,除非它们已经存在20天了:
#/etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 20d
如果您不想删除文件,请用“-”替换“ 20d”。这是我的最大努力,手册页几乎没有细节。
新设置的优点是,即使不重新引导系统,文件清理器仍可以运行(例如始终在服务器上)。我认为这是一大优势。
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
在Ubuntu 14.04中,此操作是通过进行的tmpreaper
,每天cron(from /etc/cron.daily
)都会调用它。该程序可以通过/etc/default/rcS
和配置/etc/tmpreaper.conf
。
每次重新启动时都会清理一次。
tmpreaper
。
在systemd
Ubuntu(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
在关机时运行,否则每天运行一次。可以使用另一个答案中/etc/tmpfiles.d
提到的扩展扩展清理的文件。
您可以使用systemctl edit systemd-tmpfiles-clean.timer
和使用各种systemd Timer
配置选项来更改计时器行为本身(请参阅参考资料man 5 systemd.timer
)。
/tmp
仍然没有清理。我需要将其清理干净。即使手动启动sudo systemctl start systemd-tmpfiles-clean
也无法解决问题。有什么想法吗?
在运行Ubuntu的一台服务器上,我们有一个脚本来删除/ 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服务器,出于明显的原因,我们不想重新启动它。
ln -s /usr /tmp/kaboom
甚至跑ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
了/ etc / fstab。