Як папки, створені в / var / запускаються при кожному перезавантаженні


60

У недавньому ubuntus (конкретно, що мене найбільше цікавить - 12.04) /var/runє tmpfs, і тому я припускаю, що він починається порожнім при кожному перезавантаженні.

Але я бачу там деякі папки, як /var/run/mysqldі численні інші. Як створюються ці папки при кожному перезавантаженні? Чи є якась папка шаблонів, яку скопіювали /var/run/(і якщо так, то який сценарій робить це), або кожна папка mkdirокремо редагується, чи що?

РЕДАКТУВАННЯ.
Будь ласка, не відповідайте на те, що /var/runце стійко або /runє стійко. Тому що НЕ.

Навіть якщо це так у вашій системі, це не так регулярно 12.04.


Хм, значить, у мене буде 50 реп. даремно
потрапив

Хтось, будь ласка, дайте відповідь на що-небудь розумне, і ви отримаєте +50 представників :)
Sandman4

Відповіді:


82

(Завдяки @Zulakis та відповіді на Serverfault за вказівку, що ця відповідь не відставала від постійної розробки Ubuntu.)

З прийняттям systemdстаном на 15.04 , тепер існує централізований механізм створення тимчасових файлів і каталогів, таких як цей. Служба бажаючих використовувати цей метод можна видалити mkdirкоманди в своєму сценарії запуску і замість того, щоб помістити .confфайл в /etc/tmpfiles.d, /run/tmpfiles.dабо /usr/lib/tmpfiles.d, з послугами Ubuntu удаваними воліють останній варіант. Наприклад, у моїй системі зараз є:

$ 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засіб для створення каталогу , якщо він вже не існує, після того, що це шлях, а інші є права доступу, користувач і група. Ці каталоги будуть створені незалежно від того, чи була запущена відповідна послуга.

Повну документацію див man tmpfiles.d.


СТАРИЙ ВІДПОВІДАЛЬНИЙ ВІДПОВІДЬ:

Схоже, вони створюються динамічно окремими службами під час їх запуску:

$ 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

Я вважаю, що це той, хто обробляє 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 говорить, що форма -d "створить усі компоненти зазначених каталогів".


1
Здається, це не завжди так: serverfault.com/questions/824393/…
Zulakis

Дякую, @Zulakis. Я вніс декілька змін і буду вдячний знати, чи правильно вони виходячи з вашого досвіду роботи з цією функцією.
Павло

1
Мені добре виглядає! Дякуємо за оновлення вашої відповіді :)
Zulakis

1
Оновлення для команди egrep -r. Шукали пошук у межах пошуку файлів! :-)
Нік Вудхамс

5

Нова /runпапка, встановлена ​​tmpfs, дозволяє таким програмам, як udev, lvm та mdadm, зберігати дані виконання від initrd до завершення роботи.

/var - це стандартний каталог будь-якої системи Linux / UNIX - він означає «змінну» і є місцем, де знаходиться багато журналів, кешів, але також програмні файли змінних налаштувань і навіть деякі бази даних конфігурації системи.

Більшість речей /varповинні бути належним чином очищені та регульовані системою. Ваші файли для заміни віртуальної пам’яті також живуть, /varтому не псуйтеся з цим. /var/runтакож містить багато інформації про стан та параметри активно запущених демон-процесів.

Цей каталог містить дані про системну інформацію, що описують систему з моменту її завантаження. Файли в цьому каталозі повинні бути очищені (видалені або усічені відповідно) на початку процесу завантаження. Програми можуть мати підкаталог /var/run; це рекомендується для програм, які використовують більше одного файлу запуску.

Ну оскільки /var/runмонтується як tmpfs. Це означає, що він повністю порожній, коли ваша машина завантажується, і мається на увазі так, щоб запобігти запуску таких матеріалів, як демони, через залишений PID-файл.

Сценарії запуску зазвичай створюють необхідні каталоги перед їх використанням. Якщо ви хочете зберегти PID-файл, або введіть його /var/runбезпосередньо, або створіть каталог перед створенням PID-файлу. Це не місце для зберігання даних, які повинні залишатися там під час перезавантаження.

Джерела: Ім'я Pathname & Linux System Administrator


5

Для всіх, хто стикається з цією темою, тому що ви шукаєте рішення, як можна налаштувати додаток так, щоб він створив каталог у /var/runньому, щоб він міг зберігати файл шкарпетки чи pid чи будь-який інший… ось приклад. Я натрапив на цю нитку, тому що хотів зберегти файл шкарпетки MySQL у /var/run/mysqld. Отже, після того, як я натрапив на цю нитку, я почав шукати у /etc/initфайлах приклади. dbus був хороший. І я придумав цю конфігурацію запуску 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 

Частина сценарію перед запуском зробила свою справу.


2

Тим не менш, я бачу там деякі папки, як / var / run / mysqld та численні інші. Як створюються ці папки при кожному перезавантаженні? Чи є якась папка шаблонів, яка скопійована в / var / run / (і якщо так, то який сценарій це робить), або кожна папка mkdired окремо, чи що?

Як визначено в ієрархії файлової Стандарт/var/run або /runвикористовується для зберігання даних у час виконання летючих.

Усіма створеними там папками та файлами управляє відповідна програма, яка створила файли. Немає такої речі, як копіюється папка шаблонів, кожна програма може використовувати цю папку для зберігання нестабільної інформації. Збережені дані втрачаються, коли система перезавантажується.

Загальна річ для використання /runпапки - це зберігання pidзапущених демонів, маркерних файлів, що містять номер процесу процесу. В основному вони використовуються для скриптів запуску / зупинки, які ви можете знайти, наприклад, у/etc/init.d/

Я сподіваюся, що вам це стало зрозуміло!

бр


1

Ваше припущення не зовсім правильне. Місце розташування /varпапки є узгодженим - тобто ви можете використовувати альтернативний розділ або том, на якому знаходити /varпапку. Незалежно від того, де /varпапка знаходиться, /var/runпапка є символьним посиланням на /runпапку, і її вміст залишається після перезавантаження, хоча багато файлів у файлі /runстворюються або змінюються при завантаженні службами, що починаються під час завантаження. Тож саме сервіси - наприклад, такі mysqld- вимагають завантаження файлів у /var/runкаталог і створені для створення підкаталогів, якщо вони не існують на даний момент.


1
Я створив кілька папок у / var / run, і вони зникли після перезавантаження. (конкретно 12.04)
Sandman4

Також дивіться тут, що / var / run - це справді tmpfs askubuntu.com/questions/57297/…
Sandman4

-2

douggro абсолютно правильний, / var / run монтується як tmpfs, а / var / run є символьним посиланням на / run, яке є стійким при перезавантаженнях, тому все, що входить / run, також з’явиться в (і залишається в) / var / бігати.

Таким чином, будь-які завантажувальні сервіси, такі як mysqld, що є демон, що запускається під час завантаження, і які створюють файли в / run, також матимуть файли, видимі в / var / run (symlink to / run memory). Якщо ви хочете створити файл, який зберігатиметься через перезавантаження в / var / run, створіть його в / run і потім перезавантажте.

Сподіваюся, що це відповість на ваше запитання.


3
Ви обоє помиляєтесь, або використовуєте нестандартні настройки. Перевірте самі. кріплення | grep / run .... tmpfs on / run type tmpfs
Стівен К

1
"Якщо ви хочете створити файл, який зберігатиметься через перезавантаження в / var / run, створіть його в / run та перезавантажте." Це НЕ правильно. tmpfsє мінливим і зміни втрачаються.
ortang
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.