不使用 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

幸運的是,您可以將完整的腳本路徑寫入名為/etc/rc.local(您可能必須建立它)的檔案中,而不是 init.d 服務,並使其可執行

就像這樣:

#!/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 系統被引入時,它作為保留較舊的系統初始化方法的解決方法,並且不建議再使用它。

相關內容