在普通的 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
幸運的是,您可以將完整的腳本路徑寫入名為/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 系統被引入時,它作為保留較舊的系統初始化方法的解決方法,並且不建議再使用它。