J'écris un processus démon pour un système Debian C
qui utilise un socket de domaine Unix .
Si le répertoire de travail du processus démon est le répertoire racine, existe-t-il un répertoire idiomatique pour placer le socket sur le système de fichiers?
debian
directory-structure
daemon
socket
recursion.ninja
la source
la source
Réponses:
Ils se trouvent généralement dans
/tmp
ou un sous-répertoire de ceux-ci. Notez que tout/tmp
est sujet à l'effacement à l'arrêt - pas qu'il soit nécessairement effacé, mais sachez que cela peut être , donc si vous l'utilisez, vérifiez si vous devez créer votre sous-répertoire à chaque fois. Vous voudrez utiliser un sous-répertoire si vous souhaitez restreindre l'accès via des autorisations, car il/tmp
est lisible par tout le monde./run
et/var/run
(qui peuvent être liés par un lien symbolique) sont utilisés de la même manière, mais ils sont généralement montés en tant que systèmes de fichiers tmpfs - ce qui signifie qu'ils sont créés au démarrage et résident en mémoire , pas sur le disque (ne les utilisez donc pas comme un emplacement de vidage). quantité de données abondante). Pour un socket d'exécution, c'est probablement un bon choix.Notez que
/run
, et tous les autres répertoires mentionnés ici sauf/tmp
, ne sont accessibles en écriture que par root. Pour un processus système, c'est très bien, mais si l'application peut être exécutée par un utilisateur non privilégié, vous voulez soit utiliser/tmp
ou créer un répertoire permanent quelque part et définir des autorisations à ce sujet, soit utiliser un emplacement dans le $ HOME de l'utilisateur.Il est possible de créer un répertoire dans
/usr/share
(ou/usr/local/share
) lors de l'installation. Les répertoires et le contenu ne sont pas potentiellement récupérés à travers les initialisations comme ils le seraient dans/tmp
ou/run
. Cependant, comme jordanm le fait remarquer dans les commentaires, il/usr
peut être monté en lecture seule et les directives de la hiérarchie du système de fichiers linux le reflètent . Bien sûr, il ne peut pas être en lecture seule lorsque votre application est installée, donc si vous êtes à l'aise pour y créer un socket, vous pouvez le laisser et l'utiliser plus tard (vous pourrez toujours écrire sur le socket même si le fichier est en lecture seule).Si vous voulez un endroit persistant à travers les bottes qui ne sera pas monté en lecture seule,
/etc
c'est une valeur assez sûre, car il est souvent utilisé pour les configurations et reconfigurations à l'échelle du système. OTOH, il est possible d'avoir des systèmes où le périphérique sous-jacent à l'ensemble du système de fichiers racine est en lecture seule (par exemple, les systèmes intégrés), avec / tmp et / exécuté sur un autre périphérique (probablement: tmpfs en mémoire). Ainsi, les deux stratégies les plus robustes semblent être:Installez le socket à un emplacement permanent lorsque l'application est installée.
Créez un répertoire dans
/run
ou/var/run
à l'exécution et placez-y le socket.Faites la même chose qu'en
/tmp
.L'avantage du premier est que, quoi qu'il en soit, une fois l'application installée, vous aurez un socket à utiliser. L'avantage du second est qu'il peut être plus propice à une programmation saine. L'avantage du troisième est qu'il ne nécessite pas de privilèges de superutilisateur. Il devrait être facile de passer d'une implémentation à une autre si vous changez d'avis plus tard.
Enfin, comme l'a mentionné BatchyX , vous devriez au moins offrir une option de configuration pour cela, en retombant sur votre choix de valeur par défaut.
la source
/run
ou/var/run
est également souvent utilisé pour les processus racine./tmp
. Je vais le modifier./usr
peut être monté en lecture seule. Les fichiers ne doivent jamais y être créés lors de l'exécution. Les autres suggestions sont bonnes./tmp/.APPNAME/.APPSOCK
car le démon n'a pas besoin de données persistantes./tmp
et/run
, est que seul root a des autorisations d'écriture sur/run
.