1 votes

Générer un répertoire pour les sockets unix SANS systemd

Dans l'Ubuntu normal, j'avais l'habitude de créer un répertoire pour les sockets Unix comme suit (disons pour le projet foo ) :

  1. Créer un script systemd dans : /usr/lib/tmpfiles.d/foo.conf
  2. Placez le code suivant dans le script :

    /run/foo 0770 <username> <groupname>

Puis, au prochain redémarrage, le répertoire /run/foo sera créé avec les permissions requises. La raison pour laquelle je fais cela est que seul root peut écrire dans le fichier /var/run qui renvoie à -> /run et il est courant que de nombreuses applications perdent leurs privilèges et changent d'utilisateur avant de créer la socket, ce qui fait qu'elles ne parviennent pas à écrire dans la socket. /var/run .

Maintenant j'utilise WSL2, avec Ubuntu 20.04, et systemd n'existe pas. On peut sauter à travers de nombreux cerceaux pour le faire fonctionner mais ils sont bogués.

Comment créer un dossier avec les permissions souhaitées qui est effacé après un redémarrage avant que les applications installées (par exemple nginx/postgresql) ne tentent de créer leurs sockets (et donc échouent à cause des sockets périmés d'avant le redémarrage) ?

1voto

Jaimie Sirovich Points 88

Au lieu des services init.d, vous pouvez avoir de la chance en écrivant votre chemin complet script dans un fichier appelé /etc/rc.local (vous devrez peut-être le créer) et le rendre exécutable

Comme ça :

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

El exit 0 est important !

Puis rendez-le exécutable :

chmod +x /etc/rc.local

Tout ce qui s'y trouve sera lancé comme racine au démarrage du système.

rc.local est en fait obsolète puisque 1983 y peut ne plus fonctionner . Lorsque le nouveau système SysV-Init, aujourd'hui obsolète, a été introduit, il a servi de solution de contournement pour conserver des méthodes encore plus anciennes d'initialisation du système et il n'est plus recommandé de l'utiliser.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X