75 votes

Comment les dossiers sont créés dans /var/run à chaque redémarrage.

In recent ubuntus (plus précisément, ce qui m'intéresse le plus est la 12.04) /var/run est tmpfs, et donc je suppose qu'il commence vide à chaque redémarrage.

Pourtant, je vois là quelques dossiers, comme /var/run/mysqld et de nombreux autres. Comment ces dossiers sont-ils créés à chaque redémarrage ? Existe-t-il un dossier modèle qui est copié dans /var/run/ (et si oui, quel script fait cela), ou chaque dossier mkdir édité séparément, ou quoi ?

EDIT:
S'il vous plaît, ne répondez pas à cette question /var/run est persistant, ou que /run est persistant. Parce que ça ne l'est PAS.

Même si c'est le cas sur votre mais ce n'est pas le cas sur un système 12.04 normal.

104voto

Paul Points 6359

(Merci à @Zulakis et une réponse sur Serverfault pour avoir fait remarquer que cette réponse n'avait pas suivi le développement continu d'Ubuntu).

Avec l'adoption de systemd à partir de 15.04 En effet, il existe désormais un mécanisme centralisé pour la création de fichiers et de répertoires temporaires tels que ceux-ci. Un service souhaitant utiliser cette méthode peut supprimer mkdir dans son propre script de démarrage et placer plutôt un .conf dans /etc/tmpfiles.d , /run/tmpfiles.d o /usr/lib/tmpfiles.d Les services Ubuntu semblent préférer la dernière option. Par exemple, mon système a maintenant :

$ egrep -r /var/run /usr/lib/tmpfiles.d

/usr/lib/tmpfiles.d/var.conf:L /var/run - - - - ../run
/usr/lib/tmpfiles.d/sudo.conf:d /var/run/sudo 0711 root root
/usr/lib/tmpfiles.d/sudo.conf:D /var/run/sudo/ts 0700 root root
/usr/lib/tmpfiles.d/postgresql.conf:d /var/run/postgresql 2775 postgres postgres - -
/usr/lib/tmpfiles.d/sshd.conf:d /var/run/sshd 0755 root root
/usr/lib/tmpfiles.d/screen-cleanup.conf:d /var/run/screen 0775 root utmp

El d signifie créer un répertoire s'il n'existe pas déjà, après cela il y a le chemin, et le reste sont les permissions, l'utilisateur, et le groupe. Ces répertoires seront créés indépendamment du fait que le service correspondant soit démarré ou non.

Pour une documentation complète, voir man tmpfiles.d .


ANCIENNE RÉPONSE PRÉ-SYSTEMD :

On dirait qu'ils sont créés dynamiquement par les services individuels lorsqu'ils démarrent :

$ sudo egrep -r 'mkdir.*/var/run' /etc

/etc/init.d/ssh:        mkdir /var/run/sshd
/etc/init.d/bind9:      mkdir -p /var/run/named
/etc/init.d/timidity:    mkdir -p /var/run/timidity
/etc/init.d/bzflag:                mkdir -p /var/run/bzflag
/etc/init.d/dns-clean:mkdir /var/run/pppconfig >/dev/null 2>&1 || true
/etc/init/winbind.conf: mkdir -p /var/run/samba/winbindd_privileged
/etc/init/dbus.conf:    mkdir -p /var/run/dbus
/etc/init/ssh.conf:    mkdir -p -m0755 /var/run/sshd
/etc/init/libvirt-bin.conf:     mkdir -p /var/run/libvirt
/etc/init/cups.conf:    mkdir -p /var/run/cups/certs

Je crois que c'est celui qui gère mysqld :

[ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld
/lib/init/apparmor-profile-load usr.sbin.mysqld

man install dit que la forme -d va "créer tous les composants des répertoires spécifiés".

5voto

Mitch Points 102545

Le nouveau montage tmpfs /run permet à des programmes comme udev, lvm et mdadm de conserver les données d'exécution de l'initrd jusqu'à l'arrêt.

/var est un répertoire standard de tout système Linux/UNIX - il signifie "variable" et est un endroit où résident de nombreux journaux, cahces, MAIS aussi des fichiers de paramètres de variables de programmes et même certaines bases de données de configuration du système.

La plupart des choses dans /var doit être correctement purgé et régulé par le système. Vos fichiers d'échange pour la mémoire virtuelle se trouvent également à /var alors n'y touchez pas. /var/run contient aussi beaucoup d'informations sur l'état et les paramètres des processus actifs des démons.

Ce répertoire contient des données d'informations système décrivant le système depuis son démarrage. Les fichiers de ce répertoire doivent être effacés (supprimés ou tronqués, selon le cas) au début du processus de démarrage. Les programmes peuvent avoir un sous-répertoire /var/run ; ceci est encouragé pour les programmes qui utilisent plus d'un fichier d'exécution.

Etant donné que /var/run est monté en tant que tmpfs. Cela signifie qu'il est totalement vide au démarrage de votre machine et qu'il est censé être comme ça pour éviter que des démons ne démarrent pas à cause d'un fichier PID oublié.

Démarrage des scripts créent généralement les répertoires dont ils ont besoin avant de les utiliser. Si vous voulez stocker un fichier PID, mettez-le dans le répertoire /var/run directement ou créer un répertoire avant de créer le fichier PID. Ce n'est pas l'endroit idéal pour stocker des données qui doivent rester en place après les redémarrages.

Sources : Pathname & Guide de l'administrateur système Linux

5voto

Vasilis Points 376

Si vous tombez sur ce fil de discussion parce que vous cherchez une solution pour configurer une application de manière à ce qu'elle crée le répertoire en /var/run pour qu'il puisse stocker son fichier sock ou pid ou autre voici un exemple. Je suis tombé sur ce fil de discussion parce que je voulais stocker le fichier sock de MySQL dans le répertoire /var/run/mysqld . Donc, après être tombé sur ce fil de discussion, j'ai commencé à chercher dans le /etc/init pour des exemples. dbus en était un bon. Et, je suis arrivé à cette configuration de démarrage de mysql :

start on runlevel [2345] 
stop on runlevel [!2345] 
expect daemon 

pre-start script 
    mkdir -p -m0755 /var/run/mysqld 
    chown mysql:mysql /var/run/mysqld 
end script 

exec /etc/init.d/mysql start 
pre-stop exec /etc/init.d/mysql stop 

La partie pré-démarrage script a fait l'affaire.

2voto

ortang Points 1953

Pourtant, je vois qu'il y a quelques dossiers, comme /var/run/mysqld et de nombreux autres. Comment ces dossiers sont-ils créés à chaque redémarrage ? Y a-t-il un dossier dossier modèle qui a été copié dans /var/run/ (et si c'est le cas, quel script ? fait cela), ou chaque dossier est mkdired séparément, ou quoi ?

Comme défini dans le Standard de la hiérarchie des fichiers その /var/run o /run est utilisé pour stocker des données d'exécution volatiles.

Tous les dossiers et fichiers qui y sont créés sont gérés par le programme respectif qui a créé les fichiers. Il n'existe pas de dossier modèle qui soit copié, chaque programme peut utiliser ce dossier pour stocker des informations volatiles. Les données stockées sont perdues lorsque le système redémarre.

Une chose courante pour l'utilisation de la /run est de stocker les pid des démons en cours d'exécution, des fichiers marqueurs qui contiennent le numéro de processus d'un processus. Ils sont principalement utilisés pour les scripts de démarrage/arrêt que vous pouvez trouver par exemple dans /etc/init.d/

J'espère que cela a été clair pour vous !

br

1voto

douggro Points 2447

Votre hypothèse n'est pas absolument correcte. L'emplacement de la /var est négociable, c'est-à-dire que vous pouvez utiliser une autre partition ou un autre volume pour y placer le dossier /var dossier. Quel que soit l'endroit où se trouve le /var est situé, le dossier /var/run est un lien symbolique vers le dossier /run et son contenu restent après les redémarrages, bien que de nombreux fichiers dans le dossier /run sont générés ou modifiés au démarrage par les services qui démarrent pendant le démarrage. Ce sont donc les services - tels que mysqld - qui demandent le chargement de fichiers dans le /var/run et sont configurés pour créer des sous-répertoires s'ils n'existent pas actuellement.

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