通常の Ubuntu では、次のように Unix ソケット用のディレクトリを作成していました (プロジェクト用としますfoo
)。
- 次の場所に systemd スクリプトを作成します。
/usr/lib/tmpfiles.d/foo.conf
- スクリプトに次のコードを配置します。
/run/foo 0770 <username> <groupname>
次に再起動すると、/run/foo
必要な権限で dir が作成されます。これを行う理由は、/var/run
-> へのリンクに書き込むことができるのは root のみであり/run
、多くのアプリではソケットを作成する前に権限を削除してユーザーを変更するのが一般的であるため、 への書き込みに失敗するためです/var/run
。
現在、Ubuntu 20.04 で WSL2 を使用していますが、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 システムが導入されたとき、それはシステム初期化のさらに古い方法を保持するための回避策として機能しましたが、今後は使用することは推奨されません。