进一步阅读

进一步阅读

根据此处的一些帖子,我尝试运行一个简单的脚本来清理重新启动和关闭时包含临时内容的文件夹。

按照说明和自述文件,我编写了此脚本:

/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

进一步阅读

相关内容