Wie Ordner, die in / var / erstellt wurden, bei jedem Neustart ausgeführt werden

60

In neueren Ubuntus (speziell, was mich am meisten interessiert, ist 12.04) /var/runist tmpfs, und daher gehe ich davon aus, dass es bei jedem Neustart leer wird.

Dennoch sehe ich dort einige Ordner /var/run/mysqldund zahlreiche andere. Wie werden diese Ordner bei jedem Neustart erstellt? Gibt es einen Vorlagenordner, in den kopiert wurde /var/run/(und wenn ja, in welches Skript mkdir? ) Oder einen Ordner , der separat bearbeitet wurde, oder was?

BEARBEITEN:
Bitte, antworte nicht, dass /var/runes persistent ist oder dass /runes persistent ist. Weil es nicht ist.

Auch wenn es auf Ihrem System so ist, ist es auf einem regulären 12.04 nicht so.

Sandman4
quelle
Hmm, also werde ich 50 Wiederholungen haben. Verschwendet auf eine der beiden Antworten, die beide offensichtlich eindeutig falsch sind ...
Sandman4
Jemand, bitte antworten Sie auf ALLES Vernünftige und Sie erhalten +50
Wiederholungen

Antworten:

82

(Vielen Dank an @Zulakis und eine Antwort auf Serverfault für den Hinweis, dass diese Antwort nicht mit Ubuntus laufender Entwicklung Schritt gehalten hat.)

Mit der Annahme der systemdab 15.04 , gibt es jetzt einen zentralen Mechanismus für die Erstellung von temporären Dateien und Verzeichnisse wie diese. Ein Dienst wollen diese Methode verwenden , können entfernen mkdirBefehle in seinem eigenen Startskript und stattdessen eine platzieren .confDatei in /etc/tmpfiles.d, /run/tmpfiles.doder /usr/lib/tmpfiles.d, mit Ubuntu Dienste die letzte Option zu bevorzugen scheinen. Zum Beispiel hat mein System jetzt:

$ 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

Das dMittel, um ein Verzeichnis zu erstellen, wenn es noch nicht existiert, ist der Pfad, und der Rest sind die Berechtigungen, Benutzer und Gruppen. Diese Verzeichnisse werden unabhängig davon erstellt, ob der entsprechende Dienst jemals gestartet wurde.

Eine vollständige Dokumentation finden Sie unter man tmpfiles.d.


ALTE ANTWORT VOR DEM SYSTEM:

Sieht so aus, als würden sie beim Start dynamisch von einzelnen Diensten erstellt:

$ 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

Ich glaube, das ist derjenige, der mit mysqld umgeht:

[ -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 sagt, dass das -d Formular "alle Komponenten der angegebenen Verzeichnisse erstellt".

Paul
quelle
1
Dies scheint nicht immer der Fall zu sein: serverfault.com/questions/824393/…
Zulakis
Danke, @Zulakis. Ich habe einige Änderungen vorgenommen und würde mich freuen zu wissen, ob sie aufgrund Ihrer Erfahrung mit dieser Funktion korrekt sind.
Paul
1
Sieht gut für mich aus! Vielen Dank für die Aktualisierung Ihrer Antwort :)
Zulakis
1
Upvote für den Befehl egrep -r. Ich habe nach einer Suche in der Dateisuche gesucht! :-)
Nick Woodhams
5

Der neue tmpfs-gemountete /runOrdner ermöglicht es Programmen wie udev, lvm und mdadm, Laufzeitdaten von initrd bis zum Herunterfahren beizubehalten.

/var ist ein Standardverzeichnis für jedes Linux / UNIX-System - es steht für "Variable" und ist ein Ort, an dem sich viele Protokolle, Cahces, ABER auch Programmvariablen-Einstellungsdateien und sogar einige Systemkonfigurationsdatenbanken befinden.

Die meisten Dinge /varsollten ordnungsgemäß durch das System gereinigt und geregelt werden. Ihre Auslagerungsdateien für den virtuellen Speicher befinden sich ebenfalls im Speicher /var. /var/runEnthält außerdem viele Status- und Parameterinformationen zu aktiv ausgeführten Prozessdaten.

Dieses Verzeichnis enthält Systeminformationsdaten, die das System seit dem Start beschreiben. Dateien in diesem Verzeichnis müssen zu Beginn des Startvorgangs gelöscht (entfernt oder entsprechend gekürzt) werden. Programme können ein Unterverzeichnis von haben /var/run; Dies wird für Programme empfohlen, die mehr als eine Laufzeitdatei verwenden.

Naja da /var/runwird als tmpfs gemountet. Das bedeutet, dass Ihre Maschine beim Booten völlig leer ist und dies auch tun soll, um zu verhindern, dass Daten wie Daemons aufgrund einer verbleibenden PID-Datei nicht mehr gestartet werden.

Startup-Skripte erstellen normalerweise die Verzeichnisse, die sie benötigen, bevor sie verwendet werden. Wenn Sie eine PID-Datei speichern möchten, legen Sie sie entweder /var/rundirekt an oder erstellen Sie ein Verzeichnis, bevor Sie die PID-Datei erstellen. Hier können keine Daten gespeichert werden, die nach einem Neustart dort verbleiben müssen.

Quellen: Pfadname und Linux-Systemadministratorhandbuch

Mitch
quelle
5

Für alle, die auf diesen Thread stoßen, weil Sie nach einer Lösung suchen, wie Sie eine Anwendung so konfigurieren können, dass sie das Verzeichnis erstellt, in dem /var/rundie SOCK- oder PID-Datei oder was auch immer gespeichert werden kann. Hier ein Beispiel. Ich bin auf diesen Thread gestoßen, weil ich die MySQL-Sock-Datei in speichern wollte /var/run/mysqld. Nachdem ich auf diesen Thread gestoßen war, fing ich an, in den /etc/initDateien nach Beispielen zu suchen . dbus war gut. Und ich kam mit dieser MySQL-Startkonfiguration:

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 

Der Pre-Start-Skript-Teil hat den Trick gemacht.

dcarrith
quelle
2

Dennoch sehe ich dort einige Ordner, wie / var / run / mysqld und zahlreiche andere. Wie werden diese Ordner bei jedem Neustart erstellt? Gibt es einen Vorlagenordner, der nach / var / run / kopiert wurde (und wenn ja, welches Skript macht das), oder jeden Ordner mkdired separat, oder was?

Wie in dem definierten Datei Hierarchy Standard der /var/runoder /runverwendet wird , um flüchtige Laufzeitdaten zu speichern.

Alle dort erstellten Ordner und Dateien werden von dem jeweiligen Programm verwaltet, das die Dateien erstellt hat. Es gibt keinen Vorlagenordner, der kopiert wird. Jedes Programm kann diesen Ordner zum Speichern flüchtiger Informationen verwenden. Die gespeicherten Daten gehen beim Neustart des Systems verloren.

Für die Verwendung des /runOrdners ist es üblich, die pidausgeführten Daemons zu speichern , Markierungsdateien, die die Prozessnummer eines Prozesses enthalten. Sie werden hauptsächlich für die Start- / Stopp-Skripte verwendet, die Sie beispielsweise in finden/etc/init.d/

Ich hoffe das hat es dir klar gemacht!

br

ortang
quelle
1

Ihre Annahme ist nicht absolut richtig. Der Speicherort des /varOrdners ist verhandelbar. Sie können also eine andere Partition oder ein anderes Volume verwenden, auf dem bzw. dem der /varOrdner gespeichert ist. Unabhängig davon, wo sich der /varOrdner befindet, handelt es sich bei dem /var/runOrdner um einen Symlink zu dem /runOrdner. Der Inhalt bleibt nach dem Neustart erhalten, obwohl viele der darin enthaltenen Dateien /runbeim Booten von Diensten generiert oder geändert werden, die beim Booten beginnen. Es sind also die Dienste, zum Beispiel mysqld, die das Laden von Dateien in das /var/runVerzeichnis erfordern und so eingerichtet sind, dass sie Unterverzeichnisse erstellen, wenn sie derzeit nicht vorhanden sind.

douggro
quelle
1
Ich habe einige Ordner in / var / run erstellt und sie sind nach dem Neustart verschwunden. (speziell am 12.04.)
Sandman4
Siehe auch hier, dass / var / run ist in der Tat tmpfs askubuntu.com/questions/57297/…
Sandman4
-2

douggro hat vollkommen recht, / var / run wird als tmpfs gemountet und / var / run ist ein Symlink zu / run, der über Neustarts hinweg persistent ist, sodass alles, was in / run eingeht, auch in / var / erscheint (und dort bleibt). Lauf.

Alle Boot-Dienste wie mysqld, bei denen es sich um einen beim Booten gestarteten Daemon handelt, der Dateien in / run erstellt, werden auch in / var / run angezeigt (symlink to / run remember). Wenn Sie eine Datei erstellen möchten, die nach einem Neustart in / var / run erhalten bleibt, erstellen Sie sie in / run und starten Sie sie anschließend neu.

Hoffe das beantwortet deine Frage.

nisshh
quelle
3
Sie irren sich beide oder verwenden nicht standardmäßige Setups. Überzeugen Sie sich selbst. montieren | grep / run .... tmpfs on / run Typ tmpfs
Steven K
1
"Wenn Sie eine Datei erstellen möchten, die nach einem Neustart in / var / run erhalten bleibt, erstellen Sie sie in / run und starten Sie sie neu." Das ist nicht richtig. tmpfsist volatil und Änderungen gehen verloren.
Ortang