当前位置: 首页>>技术教程>>正文


/tmp目录如何清理?

, ,

问题描述

/tmp目录如何清理?它是自动的吗?如果有,清理的频率如何?

最佳解决方案

注意!至少从Ubuntu 14.04开始,这个答案已经过时了。查看目前情况的其他答案,如果他们证明是正确的,那么他们会疯狂地向上投票。也发表评论,所以我可以把链接放在当前正确的答案。

14.04请参阅https://askubuntu.com/a/759048/1366

16.10见https://askubuntu.com/a/857154/453746


2011年的旧答案:

/tmp的清洁由新贵脚本/etc/init/mounted-tmp.conf完成。每次安装/tmp时,该脚本都由新贵运行。实际上这意味着每次启动。

该脚本的内容大致如下:如果/tmp中的文件比$TMPTIME天早,则会被删除。

$TMPTIME的默认值为0,这意味着/tmp中的每个文件和目录都被删除。 $TMPTIME/etc/default/rcS中定义的环境变量。

次佳解决方案

默认情况下,每次启动时目录都会被清除,因为TMPTIME默认为0。

在这里您可以更改以下文件中的时间:

/etc/default/rcS

TMPTIME表示tmp应该在几天内清除多久

第三种解决方案

尽管/tmp文件夹不是用于存储文件long-term的地方,但有时候您希望保留的时间比下次重新引导时长一些,这是Ubuntu系统上的默认设置。我知道一两次我在测试期间向/tmp下载了一些东西,在进行更改后重新启动,然后又丢失了原始数据。如果您想保留/tmp文件的时间更长,可以更改此设置。

更改/tmp清理频率

系统重启时清除/tmp的默认设置保存在/etc/default/rcS文件中。我们将看到的价值是TMPTIME

TMPTIME=0的当前值表示在重新启动时删除文件,尽管该文件的年龄。将该值更改为不同的(正数)值将改变文件在/tmp中的存活天数。

TMPTIME=7

此设置将允许文件在/tmp中保留一周,然后在下次重新启动时删除它们。负数(TMPTIME=-1)告诉系统不要删除/tmp中的任何内容。这可能不是你想要的,但可用。

第四种方案

在Ubuntu 14.04中,这由tmpreaper完成,每天由cron调用(来自/etc/cron.daily)。该程序可以通过/etc/default/rcS/etc/tmpreaper.conf进行配置。

第五种方案

我在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”。这是我最大的努力,那个手册页几乎无法透露细节。

新安装程序的优点是,即使系统未重新启动,文件清理程序仍可以运行(例如始终启动服务器)。我认为这是一大优势。

第六种方案

14.04之前:

每次重新启动时都会清理它。

第七种方案

在运行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服务器,我们不希望重启它,原因很明显。

第八种方案

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在关机时运行,否则每天运行一次。清理的文件可以使用another answer中提到的/etc/tmpfiles.d进行扩展。

您可以使用systemctl edit systemd-tmpfiles-clean.timer更改计时器行为本身,并使用各种systemd Timer配置选项(请参阅man 5 systemd.timer)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/131.html,未经允许,请勿转载。