Comment les dossiers créés dans / var / sont exécutés à chaque redémarrage

60

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

Pourtant, j'y vois des dossiers, comme /var/run/mysqldet de nombreux autres. Comment ces dossiers créés à chaque redémarrage? Existe-t-il un dossier de modèle dans lequel est copié /var/run/(et si oui, quel script le fait), ou chaque dossier mkdirest édité séparément, ou quoi?

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

Même s'il en est ainsi sur votre système, il ne l'est pas sur une version 12.04 normale.

Sandman4
la source
Hmm, alors je vais avoir 50 rep. gaspillé sur l'une des deux réponses qui sont toutes deux manifestement clairement faux ....
Sandman4
Quelqu'un, s'il vous plaît répondez
n'importe quoi

Réponses:

82

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

Avec l'adoption de à systemdpartir de 15.04 , il est maintenant un mécanisme centralisé pour la création de fichiers temporaires et des répertoires tels que ceux - ci. Un service qui souhaite utiliser cette méthode peut supprimer des mkdircommandes dans son propre script de démarrage et placer à la place d' un .conffichier /etc/tmpfiles.d, /run/tmpfiles.dou /usr/lib/tmpfiles.d, avec des 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 dmoyen de créer un répertoire s’il n’existe pas déjà, après le chemin d’accès et le reste, 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, voir man tmpfiles.d.


ANCIENNE REPONSE PRE-SYSTEMD:

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 indique que la forme -d créera "tous les composants des répertoires spécifiés".

Paul
la source
1
Cela ne semble pas toujours être le cas: serverfault.com/questions/824393/…
Zulakis
Merci, @Zulakis. J'ai apporté quelques modifications et je souhaiterais savoir si elles sont correctes en fonction de votre expérience avec cette fonctionnalité.
Paul
1
Cela me semble correct! Merci d'avoir mis à jour votre réponse :)
Zulakis
1
Vote positif pour la commande egrep -r. Vous recherchez une recherche dans la recherche de fichier! :-)
Nick Woodhams
5

Le nouveau /rundossier monté sur tmpfs permet à des programmes tels que udev, lvm et mdadm de conserver les données d’exécution de initrd à 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 variable de programme et même des bases de données de configuration système.

La plupart des éléments /vardoivent être correctement purgés et réglementés par le système. Vos fichiers d'échange pour la mémoire virtuelle sont également présents, /varalors ne jouez pas avec ça. /var/runcontient également un statut de lot et des informations sur les paramètres des démons de 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 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 de /var/run; cela est encouragé pour les programmes qui utilisent plusieurs fichiers d'exécution.

Eh bien depuis /var/runest monté en tant que tmpfs. Cela signifie que le disque est totalement vide au démarrage de votre machine et que cela est censé empêcher que des démons tels que les 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, insérez-le /var/rundirectement 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à pendant les redémarrages.

Sources: Chemin et Guide de l'administrateur système Linux

Mitch
la source
5

Pour tous ceux qui rencontrent ce fil parce que vous cherchez une solution pour configurer une application de manière à ce qu'elle crée le répertoire /var/runafin qu'elle puisse stocker son fichier sock ou pid ou autre… voici un exemple. Je suis tombé sur ce fil parce que je voulais stocker le fichier de chaussette MySQL /var/run/mysqld. Ainsi, après avoir découvert ce fil de discussion, j'ai commencé à chercher /etc/initdes exemples dans les fichiers. 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 pré-démarrage a fait l'affaire.

décarrith
la source
2

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

Comme défini dans la norme de hiérarchie de fichiers, le /var/runou /runest utilisé pour stocker des données d'exécution volatiles.

Tous les dossiers et fichiers créés sont gérés par le programme qui a créé les fichiers. Un dossier de modèle copié n'existe pas, 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 l’utilisation du /rundossier est de stocker les piddémons en cours, des 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/etc/init.d/

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

br

ortang
la source
1

Votre hypothèse n'est pas absolument correcte. L'emplacement du /vardossier est négociable. En d'autres termes, vous pouvez utiliser une autre partition ou un autre volume sur lequel localiser le /vardossier. Quel que soit l'endroit où /varse trouve le /var/rundossier , le dossier est un lien symbolique vers le /rundossier et son contenu reste après les redémarrages, même si de nombreux fichiers /runsont générés ou modifiés au démarrage par les services démarrant au démarrage. Ce sont donc les services - tels que mysqld- qui appellent le chargement de fichiers dans le /var/runrépertoire et sont configurés pour créer des sous-répertoires s’ils n’existent pas actuellement.

Douggro
la source
1
J'ai créé des dossiers dans / var / run et ils ont disparu après le redémarrage. (spécifiquement le 12.04)
Sandman4
Voir aussi ici que / var / run est bien tmpfs askubuntu.com/questions/57297/…
Sandman4
-2

douggro a tout à fait raison, / var / run est monté en tant que tmpfs, et / var / run est un lien symbolique vers / run qui persiste après les redémarrages. courir.

Ainsi, tous les services de démarrage comme mysqld, qui est un démon démarré au moment du démarrage, qui crée 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 après un redémarrage dans / var / run, créez-le dans / run, puis redémarrez.

J'espère que ça répond à ta question.

nisshh
la source
3
Vous vous trompez ou utilisez des configurations non standard. Vérifiez par vous-même. monter | grep / run .... tmpfs on / run type tmpfs
Steven K
1
"Si vous voulez créer un fichier qui persistera après un redémarrage dans / var / run, créez-le dans / run, puis redémarrez." Ce n'est pas correct. tmpfsest volatile et les changements sont perdus.
mardi