Generieren Sie ein Verzeichnis für Unix-Sockets OHNE systemd

Generieren Sie ein Verzeichnis für Unix-Sockets OHNE systemd

Im normalen Ubuntu habe ich ein Verzeichnis für Unix-Sockets wie folgt erstellt (sagen wir für das Projekt foo):

  1. Erstellen Sie ein systemd-Skript in:/usr/lib/tmpfiles.d/foo.conf
  2. Fügen Sie den folgenden Code in das Skript ein:
    /run/foo 0770 <username> <groupname>
    

Beim nächsten Neustart /run/foowird das Verzeichnis dann mit den erforderlichen Berechtigungen erstellt. Der Grund dafür ist, dass nur Root in das Verzeichnis schreiben kann, /var/rundas auf -> verweist /run. Außerdem ist es bei vielen Apps üblich, Berechtigungen zu verlieren und den Benutzer zu ändern, bevor der Socket erstellt wird. Daher können sie nicht in das Verzeichnis schreiben /var/run.

Jetzt verwende ich WSL2 mit Ubuntu 20.04 und systemdes existiert nicht. Man kann viele Hürden überwinden, um es zum Laufen zu bringen, aber sie sind fehlerhaft.

Wie erstellt man einen Ordner mit den gewünschten Berechtigungen, der nach einem Neustart gelöscht wird, bevor eine der installierten Apps (z. B. nginx/postgresql) versucht, ihre Sockets zu erstellen (und daher aufgrund veralteter Sockets von vor dem Neustart fehlschlägt)?

Antwort1

Anstelle von init.d-Diensten können Sie mit etwas Glück Ihren vollständigen Skriptpfad in eine Datei namens schreiben /etc/rc.local(die Sie möglicherweise erstellen müssen) und sie ausführbar machen

So:

#!/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

Das exit 0ist wichtig!

Machen Sie es dann ausführbar:

chmod +x /etc/rc.local

Alles darin wird gestartet alsWurzelbeim Systemstart.

rc.local ist eigentlich veraltet, da1983Undfunktioniert möglicherweise nicht mehr. Als das damals neue, mittlerweile veraltete SysV-Init-System eingeführt wurde, diente es als Workaround, um noch ältere Methoden der Systeminitialisierung beizubehalten, und seine Verwendung wird nicht mehr empfohlen.

verwandte Informationen