不使用 systemd 为 unix 套接字生成目录

不使用 systemd 为 unix 套接字生成目录

在普通的 Ubuntu 中,我曾经为 Unix 套接字创建一个目录,如下所示(例如对于项目foo):

  1. 在以下位置创建 systemd 脚本:/usr/lib/tmpfiles.d/foo.conf
  2. 将以下代码放入脚本中:
    /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 系统被引入时,它作为保留更旧的系统初始化方法的变通方法,并且不再建议使用它。

相关内容