搜索 tmpfiles.d 后,似乎删除文件/目录的选项数量有限。我想用类似 shred 的命令完全删除临时目录,有没有办法在 tmpfiles.d 配置中触发脚本或一些隐藏机制在 tmp 清理期间使用 shred。
答案1
是的!调用systemd-tmpfiles --remove
以删除配置有 或 的目录的所有内容D
以及R
配置有r
或 的所有文件或目录R
。
从man systemd-tmpfiles
:
--remove
If this option is passed, the contents of directories marked with D or R,
and files or directories themselves marked with r or R are removed.
为了稍微减少侵入性,您可以将其过滤为仅以前缀开头的目录:
--prefix=path
Only apply rules with paths that start with the specified prefix. This option
can be specified multiple times.
--exclude-prefix=path
Ignore rules with paths that start with the specified prefix. This option
can be specified multiple times.
或者你可以更频繁地清洁。 --clean
只会删除已过期(年龄已过)的临时文件。在以下示例中,运行systemd-tmpfiles --clean
将删除/run/screens
早于 的所有内容10d
。
# /usr/lib/tmpfiles.d/screen.conf
# Type Path Mode User Group Age Argument
d /run/screens 1777 root screen 10d -
请注意,这已经由以下人员每天检查一次systemd-tmpfiles-clean.timer
:
$ systemctl cat systemd-tmpfiles-clean.{timer,service}
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
# /lib/systemd/system/systemd-tmpfiles-clean.service
[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-set.target
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=systemd-tmpfiles --clean
SuccessExitStatus=DATAERR
IOSchedulingClass=idle
如果这对您来说还不够激进,您可以:
d /my/path 0755 user group 1h -
OnUnitActiveSec=1h
并创建一个计时器的插入项。
或者,如果您正在运行服务,请查看 中的沙箱选项man systemd.exec
。像PrivateTmp=
、RemoveIPC=
和 之类的东西DynamicUser=
确实可以在不再需要时立即删除它们。