Linux 自动清除 tmp 目录下文件
一、常见 Linux 发行版 /tmp 清理策略
发行版 | 何时删除 | 如何配置 |
---|---|---|
Ubuntu 14.04 | 系统开机引导 | 在 /etc/default/rcS 中指定 TMPTIME 参数 |
Ubuntu 16.10 | 系统开机引导 | 在 /etc/tmpfiles.d/tmp.conf 中指定 |
RedHat-like RHEL6 | 每日定时 | /etc/cron.daily/tmpwatch |
RedHat-like RHEL7 | 每日定时 | /usr/lib/tmpfiles.d/tmp.conf |
Gentoo | / | /etc/conf.d/bootmisc |
二、RHEL7 清除原理
systemd-tmpfiles-clean.service 服务
服务: systemd-tmpfiles-clean.service
服务何时被执行呢?
Linux 下该服务的执行可以根据 systemd-tmpfiles-clean.timer 进行管理
[root@shuidi-shell-001:/usr/lib/tmpfiles.d]# 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
# OnBootSec 表示相对于机器被启动的时间点
# 表示相对于匹配单元(本标签下Unit=指定的单元)最后一次被启动的时间点
上述配置文件表示两种情况会执行该服务
- 开机 15 分钟执行服务
- 离上次执行该服务 1 天后执行服务
服务如何执行呢?
[root@shuidi-shell-001:/usr/lib/tmpfiles.d]# cat /usr/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=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target time-sync.target
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle
# Type=oneshot 这一选项适用于只执行一项任务、随后立即退出的服务
# 命令文件 /usr/bin/systemd-tmpfiles
# 命令参数 --clean
# 通过定期执行 /usr/bin/systemd-tmpfiles --clean 完成清理
命令: /usr/bin/systemd-tmpfiles
[root@shuidi-shell-001:/usr/lib/tmpfiles.d]# /usr/bin/systemd-tmpfiles --help
systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]
Creates, deletes and cleans up volatile and temporary files and directories.
-h --help Show this help
--version Show package version
--create Create marked files/directories
--clean Clean up marked directories
--remove Remove marked files/directories
--boot Execute actions only safe at boot
--prefix=PATH Only apply rules with the specified prefix
--exclude-prefix=PATH Ignore rules with the specified prefix
--root=PATH Operate on an alternate filesystem root
# --clean 将会清理被标记的文件目录
哪些目录被标记,又是什么样的标记呢?
定义在配置文件 /usr/lib/tmpfiles.d/tmp.conf 中
配置文件: /usr/lib/tmpfiles.d/tmp.conf
[root@shuidi-shell-001:/usr/lib/tmpfiles.d]# cat /usr/lib/tmpfiles.d/tmp.conf
# 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.
# See tmpfiles.d(5) for details
# Clear tmp directories separately, to make them easier to override
#Type Path Mode User Group Age Argument
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d
# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp
- 在根据 寿命 字段清理过期文件时, 忽略指定的路径及该路径下的所有内容。 可以在 路径 字段中使用 shell 风格的通配符。 注意,这个保护措施对 r 与 R 无效。
- 在根据 寿命 字段清理过期文件时, 仅忽略指定的路径自身而不包括该路径下的其他内容。 可以在 路径 字段中使用 shell 风格的通配符。 注意,这个保护措施对 r 与 R 无效。
上述配置表示:
- 清理 /tmp 目录超过 10 天的内容,但是匹配 /tmp/systemd-private-%b-* 的目录及其路径下的全部内容会被保留。
- 清理 /var/tmp 目录超过 30 天的内容,但是匹配 /var/tmp/systemd-private-%b-* 的目录及其路径下的全部内容被保留。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论