Come le cartelle create in / var / vengono eseguite ad ogni riavvio


60

In Ubuntus recente (in particolare, ciò che mi interessa di più è 12.04) /var/runè tmpfs, e quindi presumo che inizi vuoto con ogni riavvio.

Eppure, vedo lì alcune cartelle, come /var/run/mysqlde numerose altre. Come sono state create quelle cartelle ad ogni riavvio? Esiste una cartella di modelli in cui è stata copiata /var/run/(e, in tal caso, in quale script è presente) o ogni cartella mkdir"edita separatamente" o cosa?

EDIT:
Per favore, non rispondere che /var/runè persistente o che /runè persistente. Perché NON lo è.

Anche se è così sul tuo sistema, non è così su un normale 12.04.


Hmm, quindi avrò 50 rappresentanti. sprecato in una delle due risposte che sono entrambe chiaramente chiaramente sbagliate ....
Sandman4

Qualcuno, ti preghiamo di rispondere a QUALSIASI cosa sensata e ottieni +50 ripetizioni :)
Sandman4

Risposte:


82

(Grazie a @Zulakis e una risposta su Serverfault per aver sottolineato che questa risposta non aveva tenuto il passo con lo sviluppo in corso di Ubuntu.)

Con l'adozione a systemdpartire dal 15.04 , esiste ora un meccanismo centralizzato per la creazione di file e directory temporanei come questi. Un servizio che desiderano utilizzare questo metodo in grado di rimuovere mkdiri comandi nel proprio script di avvio e invece mettere un .conffile in /etc/tmpfiles.d, /run/tmpfiles.do /usr/lib/tmpfiles.d, con i servizi di Ubuntu sembrava preferire l'ultima opzione. Ad esempio, il mio sistema ora ha:

$ 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

I dmezzi per creare una directory se non esiste già, dopo che è il percorso, e il resto sono le autorizzazioni, l'utente e il gruppo. Queste directory verranno create indipendentemente dal fatto che il servizio corrispondente sia mai stato avviato.

Per la documentazione completa, vedere man tmpfiles.d.


VECCHIA RISPOSTA PRE-SISTEMA:

Sembra che vengano creati dinamicamente dai singoli servizi all'avvio:

$ 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

Credo che questo sia quello che gestisce 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 dice che il modulo -d "creerà tutti i componenti delle directory specificate".


1
Questo non sembra sempre essere il caso: serverfault.com/questions/824393/…
Zulakis

Grazie, @Zulakis. Ho apportato alcune modifiche e apprezzerei sapere se sono corrette in base alla tua esperienza con questa funzione.
Paul,

1
Mi sembra buono! Grazie per aver aggiornato la tua risposta :)
Zulakis,

1
Upvote per il comando egrep -r. State cercando una ricerca all'interno della ricerca di file! :-)
Nick Woodhams

5

La nuova /runcartella montata su tmpfs consente a programmi come udev, lvm e mdadm di mantenere i dati di runtime da initrd fino allo spegnimento.

/var è una directory standard di qualsiasi sistema Linux / UNIX - sta per "variabile" ed è un luogo in cui risiedono molti registri, funzionalità, MA anche programmi di file di impostazioni variabili e persino alcuni database di configurazione di sistema.

La maggior parte delle cose /vardovrebbe essere correttamente eliminata e regolata dal sistema. Anche i tuoi file di scambio per la memoria virtuale vivono, /varquindi non scherzare con quello. /var/runcontiene anche molte informazioni sullo stato e sui parametri dei daemon di processi attivi.

Questa directory contiene i dati delle informazioni di sistema che descrivono il sistema da quando è stato avviato. I file in questa directory devono essere cancellati (rimossi o troncati come appropriato) all'inizio del processo di avvio. I programmi possono avere una sottodirectory di /var/run; questo è consigliato per i programmi che usano più di un file di runtime.

Bene poiché /var/runè montato come tmpfs. Ciò significa che è completamente vuoto all'avvio della macchina ed è pensato per essere così per impedire che cose come i demoni non si avviino a causa di un file PID rimasto.

Gli script di avvio di solito creano le directory di cui hanno bisogno prima di usarli. Se si desidera archiviare un file PID o inserirlo /var/rundirettamente o creare una directory prima di creare il file PID. Non è possibile archiviare dati che devono rimanere lì durante i riavvii.

Fonti: percorso e guida dell'amministratore di sistema Linux


5

Per chiunque si imbatta in questo thread perché stai cercando una soluzione su come configurare un'applicazione in modo che crei la directory in /var/runmodo che possa archiviare il suo file sock o pid o qualsiasi altra cosa ... ecco un esempio. Mi sono imbattuto in questo thread perché volevo archiviare il file calzino MySQL /var/run/mysqld. Quindi, dopo essermi imbattuto in questo thread, ho iniziato a cercare nei /etc/initfile degli esempi. dbus era buono. E, ho pensato a questa configurazione di avvio 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 parte di script pre-avvio ha funzionato.


2

Tuttavia, vedo lì alcune cartelle, come / var / run / mysqld e numerose altre. Come sono state create quelle cartelle ad ogni riavvio? Esiste una cartella di modelli che è stata copiata in / var / run / (e, in tal caso, quale script lo fa), o ogni cartella mkdired separatamente, o cosa?

Come definito nella gerarchia di file standard del /var/runo /runviene utilizzata per memorizzare i dati di runtime volatili.

Tutte le cartelle e i file creati sono gestiti dal rispettivo programma che ha creato i file. Non esiste una cartella modello che viene copiata, ogni programma può usare quella cartella per archiviare informazioni volatili. I dati memorizzati vengono persi al riavvio del sistema.

Una cosa comune per l'utilizzo della /runcartella è l'archiviazione piddei daemon in esecuzione, file marker che contengono il numero di processo di un processo. Vengono utilizzati principalmente per gli script di avvio / arresto che è possibile trovare ad esempio in/etc/init.d/

Spero che questo ti abbia chiarito le cose!

br


1

Il tuo presupposto non è assolutamente corretto. La posizione della /varcartella è negoziabile, ovvero è possibile utilizzare una partizione o un volume alternativi su cui individuare la /varcartella. Indipendentemente da dove /varsi trova la /var/runcartella , la cartella è un collegamento simbolico alla /runcartella e il suo contenuto rimane dopo il riavvio, anche se molti dei file in /runvengono generati o modificati all'avvio dai servizi che si avviano durante l'avvio. Quindi sono i servizi - come mysqld- che richiedono il caricamento di file nella /var/rundirectory e sono impostati per creare sottodirectory se non esistono attualmente.


1
Ho creato alcune cartelle in / var / run e sono scomparse dopo il riavvio. (in particolare il 12.04)
Sandman4

Vedi anche qui / var / run è davvero tmpfs askubuntu.com/questions/57297/…
Sandman4

-2

douggro ha assolutamente ragione, / var / run è montato come tmpfs, e / var / run è un link simbolico a / run che è persistente nei riavvii, quindi tutto ciò che va in / run apparirà anche (e rimarrà in) / var / correre.

Quindi qualsiasi servizio di avvio come mysqld, che è un demone che viene avviato all'avvio, che crea file in / run, avrà anche file visibili in / var / run (link simbolico a / run remember). Se si desidera creare un file che persisterà attraverso un riavvio in / var / run, crearlo in / run e quindi riavviare.

Spero che questo risponda alla tua domanda.


3
Vi sbagliate entrambi o utilizzate configurazioni non standard. Verifica tu stesso. montare | grep / run .... tmpfs on / run tipo tmpfs
Steven K

1
"Se si desidera creare un file che persisterà attraverso un riavvio in / var / run, crearlo in / run e quindi riavviare." Questo NON è corretto. tmpfsè volatile e i cambiamenti vanno persi.
ortang
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.