web-dev-qa-db-fra.com

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

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

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 mkdirname __ 'ed séparément, ou quoi?

MODIFIER:
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 votre système, ce n'est pas le cas sur un 12.04 normal.

57
Sandman4

(Merci à @Zulakis et ne 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 systemd à compter de 15.04 , il existe désormais 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 des 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

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

77
Paul

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

La plupart des éléments de /var doivent être correctement purgés et réglementés par le système. Vos fichiers d'échange pour la mémoire virtuelle résident également dans /var, alors ne jouez pas avec cela. /var/run contient é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, puisque /var/run est 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, saisissez-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à pendant les redémarrages.

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

5
Mitch

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 dans /var/run afin qu'il 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 dans /var/run/mysqld. Ainsi, après avoir découvert ce fil de discussion, 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 pré-démarrage a fait l'affaire.

5
dcarrith

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 le File Hierarchy Standard , le /var/run ou le /run est 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, tous les programmes peuvent utiliser ce dossier pour stocker des informations volatiles. Les données stockées sont perdues au redémarrage du système.

Pour utiliser le dossier /run, il est courant de stocker le pid des démons en cours d’exécution, des fichiers de marqueurs contenant le numéro de processus d’un processus. Ils sont principalement utilisés pour les scripts de démarrage/d'arrêt que vous pouvez trouver par exemple dans /etc/init.d/

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

br

2
ortang

Votre hypothèse n'est pas absolument correcte. L'emplacement du dossier /var est négociable. En d'autres termes, vous pouvez utiliser une autre partition ou un autre volume sur lequel 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 les redémarrages, bien que la plupart des fichiers de /run soient générés ou modifiés au démarrage par les services démarrant pendant le démarrage. Ce sont donc les services - tels que mysqld - qui appellent le chargement de fichiers dans le répertoire /var/run et sont configurés pour créer des sous-répertoires s’ils n’existent pas actuellement.

1
douggro