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

47

Dans Ubuntus récent (en particulier, ce qui m'intéresse le plus, c'est 12.04) /var/run est tmpfs, et donc je suppose qu'il démarre vide à chaque redémarrage.

Pourtant, je vois certains dossiers, comme /var/run/mysqld et de nombreux autres. Comment ces dossiers créés à chaque redémarrage? Y at-il un dossier de modèle qui a été copié dans /var/run/ (et si oui, quel script fait cela), ou chaque dossier mkdir 'ed séparément, ou quoi?

EDIT:
S'il vous plaît, ne répondez pas que /var/run est persistant, ou que /run est persistant. Parce que ce n'est pas.

Même si c'est le cas sur votre système , ce n’est pas le cas sur une version 12.04 normale.

    
posée Sandman4 02.06.2013 - 11:59
la source

6 réponses

57

(Merci à @Zulakis et à une réponse sur Serverfault pour indiquer que cette réponse n’a pas été suivie par Ubuntu développement.)

Avec l'adoption de systemd à partir de 15.04 , il existe maintenant un mécanisme centralisé pour la création de fichiers temporaires et de répertoires tels que ceux-ci. Un service souhaitant utiliser cette méthode peut supprimer les commandes mkdir dans son propre script de démarrage et placer un fichier .conf dans /etc/tmpfiles.d , /run/tmpfiles.d ou /usr/lib/tmpfiles.d , les services Ubuntu semblant 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

Le d signifie créer un répertoire s'il n'existe pas déjà, après c'est le chemin d'accès, et les autres sont les autorisations, l'utilisateur et le groupe. Ces répertoires seront créés, que le service correspondant soit ou non démarré.

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

ANCIENNE RÉPONSE PRÉ-SYSTÈME:

On dirait qu'ils sont créés dynamiquement par des services individuels au démarrage:

$ 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 fiche -d "créera tous les composants des répertoires spécifiés".

    
réponse donnée Paul 10.06.2013 - 16:30
la source
5

Pour tous ceux qui rencontrent ce sujet parce que vous recherchez une solution pour configurer une application afin de créer le répertoire dans /var/run afin de pouvoir stocker son fichier sock ou pid ou autre ... voici un exemple . Je suis tombé sur ce fil parce que je voulais stocker le fichier chaussette MySQL dans /var/run/mysqld . Donc, après avoir trouvé ce fil, j'ai commencé à chercher des exemples dans les fichiers /etc/init . dbus était un bon. Et, je suis venu avec cette configuration de démarrage 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 script de pré-démarrage a fait l'affaire.

    
réponse donnée dcarrith 20.03.2014 - 04:37
la source
4

Le nouveau dossier /run monté sur tmpfs permet aux programmes tels que udev, lvm et mdadm de conserver les données d’exécution d’initrd jusqu’à la fermeture.

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

La plupart des choses dans /var doivent être correctement purgées et régulées par le système. Vos fichiers d'échange pour la mémoire virtuelle vivent également dans /var , alors ne vous trompez pas. /var/run contient également un état de lot et des informations sur les paramètres des processus en cours d'exécution.

Ce répertoire contient des informations sur le système décrivant le système depuis son démarrage. Les fichiers sous ce répertoire doivent être effacés (supprimés ou tronqués comme il convient) au début du processus de démarrage. Les programmes peuvent avoir un sous-répertoire de /var/run ; Ceci est encouragé pour les programmes qui utilisent plusieurs fichiers d'exécution.

Bien que /var/run est monté en tmpfs. Cela signifie qu'il est totalement vide lorsque votre machine démarre et qu'il est censé être comme ceci pour éviter que des choses comme des démons ne démarrent à cause d'un fichier PID restant.

Les scripts de démarrage créent généralement les répertoires dont ils ont besoin avant de les utiliser. Si vous souhaitez stocker un fichier PID, placez-le directement dans /var/run ou créez un répertoire avant de créer le fichier PID. Ce n’est pas un endroit pour stocker des données qui doivent rester là lors des redémarrages.

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

    
réponse donnée Mitch 11.06.2013 - 08:59
la source
2
  

Pourtant, j'y vois certains dossiers, comme / var / run / mysqld et de nombreux autres.   autres. Comment ces dossiers créés à chaque redémarrage? Y a-t-il des   dossier de modèle qui a copié dans / var / run / (et si oui, quel script   est-ce que), ou chaque dossier mkdired séparément, ou quoi?

Comme défini dans la norme de hiérarchie des fichiers , /var/run ou /run est utilisé pour stocker les données d’exécution volatiles.

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

Une chose courante pour utiliser le dossier /run consiste à stocker% da_de% de démons en cours d'exécution, fichiers de marqueurs contenant 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 pid

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

br

    
réponse donnée ortang 11.06.2013 - 14:06
la source
1

Votre hypothèse n'est pas tout à fait correcte. L'emplacement du dossier /var est négociable. En d'autres termes, vous pouvez utiliser une autre partition ou un autre volume pour localiser le dossier /var . Indépendamment de l'emplacement du dossier /var , le dossier /var/run est un lien symbolique vers le dossier /run et son contenu reste après le redémarrage, bien que la plupart des fichiers de /run soient générés ou modifiés au démarrage par les services. lors du démarrage Ce sont donc les services - tels que mysqld - qui appellent à charger des fichiers dans le répertoire /var/run et sont configurés pour créer des sous-répertoires s'ils n'existent pas actuellement.

    
réponse donnée douggro 02.06.2013 - 16:19
la source
-2

douggro a tout à fait raison, / var / run est monté en tmpfs, et / var / run est un lien symbolique vers / run qui persiste lors des redémarrages, donc tout ce qui entre / run apparaîtra dans (et restera dans) / var / run.

Ainsi, tous les services de démarrage comme mysqld, qui est un démon lancé au démarrage, qui créent des fichiers dans / run, auront également des fichiers visibles dans / var / run (lien symbolique vers / run remember). Si vous souhaitez créer un fichier qui persistera lors d'un redémarrage dans / var / run, créez-le dans / run, puis redémarrez.

J'espère que cela répond à votre question.

    
réponse donnée nisshh 06.06.2013 - 16:15
la source

Lire d'autres questions sur les étiquettes