本文介绍使用systemd-tmpfiles以在Linux操作系统中自动清除未使用的临时文件。在大多数现代Linux系统中,需要大量临时文件和目录才能进行最佳处理,如果不经常清理,它们可能会累积使用更多的存储空间,因此,有必要清除旧文件,以免它们占用磁盘空间。另外,一些用户/应用程序将使用/tmp目录来保存临时数据,而其他用户/应用程序将使用特定的位置,例如守护进程和/run下的用户特定目录,文件仅存在于内存中,如果系统重新启动或断电,这些存储的所有内容都将消失。

在Linux中自动清除未使用的临时文件

在Red Hat Enterprise Linux 7和更高版本中,包含了一个称为systemd-tmpfiles的新工具,该工具提供了一种结构化且可配置的方法来管理临时目录和文件。

可以使用以下命令检查启动服务:

$ systemctl status  systemd-tmpfiles-*

LINUX createTempFile 临时文件在哪里 linux存放临时文件_启动服务

启动systemd-tmpfiles-setup服务单元时,它将运行systemd-tmpfiles –create –remove命令,该命令从以下位置检查配置文件:

/usr/lib/tmpfiles.d/.conf
/run/tmpfiles.d/.conf
/etc/tmpfiles.d/*.conf

如果上述配置文件中有标记为删除的文件和目录,则会将其删除,对于标记为创建的文件和目录,必要时使用正确的权限创建它们。

使用Systemd计时器清除临时文件

一个名为systemd-tmpfiles-clean.timer的systemd计时器单元会按固定的时间间隔触发systemd-tmpfiles-clean.service,然后执行systemd-tmpfiles -clean命令。

将在[Timer]选项中指定启动服务的频率,请参见下面的示例:

$ cat /usr/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

在上面的示例中,系统启动后15分钟将触发systemd-tmpfiles-clean.service,其他任何触发都在上次服务触发后24小时发生,可以根据自己的情况调整值。

如果进行更改,请确保重新加载服务:

sudo systemctl daemon-reload
sudo systemctl enable --now systemd-tmpfiles-clean.timer

手动清理临时文件

让我们配置systemd-tmpfiles来清理/mytmp目录,这将确保目录不包含最近3天未使用过的文件。

可以复制示例配置/usr/lib/tmpfiles.d/tmp.conf文件并进行更新。

如下编辑文件:

$ sudo vim /etc/tmpfiles.d/mytmp.conf
See tmpfiles.d(5) for details
# Clear tmp directories separately, to make them easier to override
q /mytmp 1777 root root 3d

如果要确保拥有正确所有权的直接性,请创建如下配置:

d /run/mytmp 0700 root root 60s

必须清除该目录中最近60秒钟内未使用的任何文件。

创建文件后,使用以下命令确保文件包含适当的配置:

sudo systemd-tmpfiles --create /etc/tmpfiles.d/mytmp.conf

如果在输出中看不到任何错误,则表明配置设置正确,可以随时使用以下命令调用手动清理:

systemd-tmpfiles --clean /etc/tmpfiles.d/mytmp.conf

相关主题