在普通的 Ubuntu 中,我曾经为 Unix 套接字创建一个目录,如下所示(例如对于项目foo
):
- 在以下位置创建 systemd 脚本:
/usr/lib/tmpfiles.d/foo.conf
- 将以下代码放入脚本中:
/run/foo 0770 <username> <groupname>
然后下次重新启动时,/run/foo
将使用所需的权限创建目录。我这样做的原因是,只有 root 可以写入/var/run
链接到 -> 的目录/run
,并且许多应用程序通常会在创建套接字之前放弃权限并更改用户,因此它们无法写入/var/run
。
现在我正在使用 WSL2,Ubuntu 20.04,并且systemd
不存在。人们可以克服许多困难让它工作,但它们都有缺陷。
如何创建一个具有所需权限的文件夹,该文件夹在重新启动后被清除,在任何已安装的应用程序(例如 nginx/postgresql)尝试创建其套接字之前(并因此由于重新启动之前的套接字陈旧而失败)?
答案1
除了 init.d 服务之外,您还可以将完整的脚本路径写入名为/etc/rc.local
(您可能必须创建它)的文件中,并使其可执行
就像这样:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
## Examples:
/usr/bin/foo # a program
/usr/local/bin/bar.sh # a shell script
/etc/init.d/foobar start # a service
exit 0
这exit 0
很重要!
然后使其可执行:
chmod +x /etc/rc.local
其中的所有内容都将以根在系统启动时。
rc.local 实际上已经过时了,因为1983和可能不再起作用当当时新的、现已过时的 SysV-Init 系统被引入时,它作为保留更旧的系统初始化方法的变通方法,并且不再建议使用它。