Jak foldery utworzone w / var / działają przy każdym restarcie

60

W najnowszym Ubuntus (szczególnie najbardziej interesuje mnie 12.04) /var/runsą tmpfs, dlatego zakładam, że zaczyna się pusty przy każdym ponownym uruchomieniu.

Widzę jednak kilka folderów, takich jak /var/run/mysqldi wiele innych. Jak te foldery tworzone przy każdym ponownym uruchomieniu? Czy istnieje folder szablonów, który został skopiowany /var/run/(a jeśli tak, to który skrypt to robi), czy każdy folder mkdirjest edytowany osobno, czy co?

EDYCJA:
Proszę, nie odpowiadaj, który /var/runjest trwały lub który /runjest trwały. Ponieważ to nie jest.

Nawet jeśli tak jest w twoim systemie, nie jest tak regularnie 12.04.

Sandman4
źródło
Hmm, więc mam 50 powtórzeń. zmarnowane na jedną z dwóch odpowiedzi, które są oczywiście wyraźnie błędne ....
Sandman4
Ktoś, proszę odpowiedzieć na WSZELKIE rozsądne, a dostaniesz +50 powtórzeń :)
Sandman4

Odpowiedzi:

82

(Dzięki @Zulakis i odpowiedzi na Serverfault za wskazanie, że ta odpowiedź nie nadążała za ciągłym rozwojem Ubuntu.)

Wraz z przyjęciem systemdna dzień 15.04 , obecnie istnieje scentralizowany mechanizm do tworzenia tymczasowych plików i katalogów, takich jak te. Usługa chcąc skorzystać z tej metody można usunąć mkdirkomendy w swoim skrypcie startowym i zamiast umieścić .confplik /etc/tmpfiles.d, /run/tmpfiles.dlub /usr/lib/tmpfiles.dz usługi Ubuntu zdaje się preferować ostatnią opcję. Na przykład mój system ma teraz:

$ 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

Te dśrodki do utworzenia katalogu jeśli nie istnieje, po to jest droga, a reszta to uprawnienia, użytkownik, a grupa. Te katalogi zostaną utworzone niezależnie od tego, czy odpowiednia usługa została kiedykolwiek uruchomiona.

Aby uzyskać pełną dokumentację, patrz man tmpfiles.d.


ODPOWIEDŹ STARY PRZEDSYSTEMOWANĄ:

Wygląda na to, że są tworzone dynamicznie przez poszczególne usługi, gdy zaczynają:

$ 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

Wierzę, że to ten, który obsługuje 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 mówi, że formularz -d „utworzy wszystkie komponenty określonych katalogów”.

Paweł
źródło
1
Nie zawsze wydaje się, że tak jest: serverfault.com/questions/824393/…
Zulakis,
Dzięki, @Zulakis. Wprowadziłem kilka zmian i będę wdzięczny za informację, czy są one poprawne na podstawie Twojego doświadczenia z tą funkcją.
Paul
1
Dla mnie wygląda dobrze! Dziękujemy za aktualizację odpowiedzi :)
Zulakis,
1
Upvote dla polecenia egrep -r. Szukałem wyszukiwania w ramach wyszukiwania plików! :-)
Nick Woodhams
5

Nowy /runfolder zamontowany w tmpfs pozwala programom takim jak udev, lvm i mdadm przechowywać dane środowiska uruchomieniowego od initrd do zamknięcia.

/var jest standardowym katalogiem dowolnego systemu Linux / UNIX - oznacza „zmienną” i jest miejscem, w którym znajduje się wiele dzienników, pamięci, ALE również programuje pliki ustawień zmiennych, a nawet niektóre bazy danych konfiguracji systemu.

Większość rzeczy /varpowinna być odpowiednio oczyszczona i uregulowana przez system. Twoje pliki wymiany pamięci wirtualnej również tam są, /varwięc nie zadzieraj z tym. /var/runzawiera również wiele informacji o statusie i parametrach aktywnie działających demonów procesu.

Ten katalog zawiera dane informacji o systemie opisujące system od momentu jego uruchomienia. Pliki w tym katalogu muszą zostać wyczyszczone (odpowiednio usunięte lub obcięte) na początku procesu rozruchu. Programy mogą mieć podkatalog /var/run; jest to zalecane w przypadku programów, które używają więcej niż jednego pliku wykonawczego.

Cóż, ponieważ /var/runjest montowany jako tmpfs. Oznacza to, że jest całkowicie pusty, gdy twoja maszyna się uruchamia, i ma tak być, aby zapobiec uruchamianiu się demonów z powodu pozostawionego pliku PID.

Skrypty startowe zwykle tworzą katalogi, których potrzebują przed ich użyciem. Jeśli chcesz zapisać plik PID, umieść go /var/runbezpośrednio lub utwórz katalog przed utworzeniem pliku PID. To nie jest miejsce do przechowywania danych, które muszą tam pozostać podczas ponownego uruchamiania.

Źródła: Ścieżka i przewodnik administratora systemu Linux

Mitch
źródło
5

Dla każdego, kto natknie się na ten wątek, ponieważ szukasz rozwiązania, w jaki sposób możesz skonfigurować aplikację, aby utworzyła katalog, w którym /var/runbędzie mógł przechowywać swój plik skarpety lub pid lub cokolwiek… oto przykład. Natknąłem się na ten wątek, ponieważ chciałem przechowywać plik skarpety MySQL /var/run/mysqld. Po tym, jak natknąłem się na ten wątek, zacząłem szukać w /etc/initplikach przykładów. dbus był dobry. I wymyśliłem tę konfigurację uruchamiania 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 

Część skryptu przed uruchomieniem załatwiła sprawę.

dcarrith
źródło
2

Widzę jednak kilka folderów, takich jak / var / run / mysqld i wiele innych. Jak te foldery tworzone przy każdym ponownym uruchomieniu? Czy jest jakiś folder szablonów, który został skopiowany do / var / run / (a ​​jeśli tak, to który skrypt to robi), lub każdy folder mkdired osobno, czy co?

Zgodnie z definicją zawartą w hierarchii plików Standardowe/var/run lub /runsłuży do przechowywania danych lotnych środowiska wykonawczego.

Wszystkimi utworzonymi tam folderami i plikami zarządza odpowiedni program, który utworzył pliki. Nie ma czegoś takiego jak kopiowany folder szablonów, każdy program może używać tego folderu do przechowywania zmiennych danych. Zapisane dane zostaną utracone po ponownym uruchomieniu systemu.

Częstą rzeczą w korzystaniu z /runfolderu jest przechowywanie piduruchomionych demonów, plików znaczników zawierających numer procesu. Są one głównie używane w skryptach start / stop, które można znaleźć na przykład w/etc/init.d/

Mam nadzieję, że to wyjaśniło wam wszystko!

br

ortang
źródło
1

Twoje założenie nie jest całkowicie poprawne. Lokalizacja /varfolderu jest do negocjacji - to znaczy możesz użyć alternatywnej partycji lub woluminu, na którym chcesz zlokalizować /varfolder. Niezależnie od tego, gdzie /varznajduje się folder, /var/runfolder jest dowiązaniem symbolicznym do /runfolderu, a jego zawartość pozostaje po ponownym uruchomieniu komputera, chociaż wiele plików /runjest generowanych lub modyfikowanych podczas rozruchu przez usługi uruchamiane podczas rozruchu. Tak więc usługi - takie jak mysqld- wymagają wczytywania plików do /var/runkatalogu i są skonfigurowane do tworzenia podkatalogów, jeśli obecnie nie istnieją.

Douggro
źródło
1
Utworzyłem niektóre foldery w / var / run i zniknęły po ponownym uruchomieniu. (konkretnie 12.04)
Sandman4
Zobacz także, że / var / run jest rzeczywiście tmpfs askubuntu.com/questions/57297/…
Sandman4
-2

douggro ma absolutną rację, / var / run jest montowany jako tmpfs, a / var / run jest dowiązaniem symbolicznym do / run, które jest trwałe podczas restartów, więc wszystko, co wejdzie w / run, pojawi się również w (i pozostanie) / var / biegać.

Tak więc wszelkie usługi rozruchowe, takie jak mysqld, który jest demonem uruchamianym podczas rozruchu, który tworzy pliki w / run, również będą miały pliki widoczne w / var / run (dowiązanie symboliczne do / run Remember). Jeśli chcesz utworzyć plik, który będzie trwał przez ponowne uruchomienie w / var / run, utwórz go w / run, a następnie uruchom ponownie.

Mam nadzieję, że to odpowiada na twoje pytanie.

nisshh
źródło
3
Oboje się mylicie lub korzystacie z niestandardowych ustawień. Sprawdź sam. zamontować | grep / run .... tmpfs on / run type tmpfs
Steven K
1
„Jeśli chcesz utworzyć plik, który będzie trwał przez ponowne uruchomienie w / var / run, utwórz go w / run, a następnie uruchom ponownie.” To nie jest poprawne. tmpfsjest niestabilny i zmiany są tracone.
ortang