根据此处的一些帖子,我尝试运行一个简单的脚本来清理重新启动和关闭时包含临时内容的文件夹。
按照说明和自述文件,我编写了此脚本:
/etc/init.d/cleantmp
#!/bin/sh
### BEGIN INIT INFO
# Provides: cleantmp
# Required-Start:
# Required-Stop: $local_fs
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: clean temporary folders
# Description:
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
echo "Clean up temporary folders"
rm -rf /home/user/tmp/*
然后我给了它执行权:
$ sudo chmod +x /etc/init.d/cleantmp
$ ls -l /etc/init.d/cleantmp
-rwxr-xr-x 1 root root 329 Dec 19 12:50 /etc/init.d/cleantmp
然后我更新 rc:
$ sudo update-rc.d cleantmp defaults
$ ls -l /etc/rc?.d/*cleantmp
lrwxrwxrwx 1 root root 18 Dec 19 13:12 /etc/rc0.d/K01cleantmp -> ../init.d/cleantmp
lrwxrwxrwx 1 root root 18 Dec 19 13:12 /etc/rc1.d/K01cleantmp -> ../init.d/cleantmp
lrwxrwxrwx 1 root root 18 Dec 19 13:12 /etc/rc6.d/K01cleantmp -> ../init.d/cleantmp
到目前为止,一切都很好。但关机并启动或重新启动后,临时文件仍然存在。如果我直接调用使用sudo
文件的符号链接之一就会正确消失。
这里有什么问题吗?
操作系统:Linux 4.4.0-104-generic #127-Ubuntu | Ubuntu Gnome 16.04.3 LTS 64 位
答案1
存在三个重大错误:
rc
当 Ubuntu 16 是一个 systemd 操作系统并且实际上在其上时,您编写了 van Smoorenburg脚本第二rc
自从十多年前使用 van Smoorenburg 以来的 init 系统。rc
如果您正在 Ubuntu Linux 上做新的事情,请不要从 van Smoorenburg 开始。- 你写了范斯穆伦伯格的
rc
剧本严重地,不是init-d-script
按照(5) 手册页中的说明或示例进行操作。对于初学者来说,您的rc
脚本无法正确响应调用此类脚本的各种子命令,也无法获取 Debian/Ubuntu 标准函数库。 - 您的 LSB 标头错误。
原则上不要从 Ubuntu Linux 上已经过时十多年的东西开始,把它扔掉。
- 给自己写一个
clean-user-tmp.conf
文件/etc/tmpfiles.d
,或者 - 给自己写一个
/etc/systemd/system/clean-user-tmp.service
类似的东西[单元] 文档=https://unix.stackexchange.com/a/411804/5132 描述=删除~user/tmp/ [服务] 用户=用户 ;要避免的常见错误: ;期望 * 或 ~ 被扩展 ;不使用命令的绝对路径名 ;如果您没有安装 safe-rm,请替换 /bin/rm。 ExecStart=/usr/bin/rm -r -f -- ${HOME}/tmp/ [安装] WantedBy=多用户.target
并启用它systemctl 启用 clean-user-tmp.service
, 或者 - 自己写一个
/home/user/.local/share/systemd/user/clean-tmp.service
并启用它systemctl --用户启用 clean-tmp.service
。