Как папки, созданные в / var /, запускаются при каждой перезагрузке

60

В недавнем Ubuntus (в частности, меня больше всего интересует 12.04) /var/run- это tmpfs, и поэтому я предполагаю, что он запускается пустым при каждой перезагрузке.

Тем не менее, я вижу там некоторые папки, как /var/run/mysqldи многие другие. Как эти папки создаются при каждой перезагрузке? Есть ли какая-нибудь папка с шаблоном, в которую была скопирована /var/run/(и если да, то какой скрипт это делает), или каждая папка mkdirредактировалась отдельно, или как?

РЕДАКТИРОВАТЬ:
Пожалуйста, не отвечайте, что /var/runявляется постоянным или /runпостоянным. Потому что это не так.

Даже если это так в вашей системе, это не так на обычной 12.04.

Sandman4
источник
Хм, так что у меня будет 50 представителей. потрачены впустую на один из двух ответов, которые оба явно явно неверны ...
Sandman4
Кто-нибудь, пожалуйста, ответьте НИЧЕГО разумного, и вы получите +50 повторений :)
Sandman4

Ответы:

83

(Спасибо @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
Upvote для команды 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's Guide.

Митч
источник
5

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

Предварительная часть сценария сделала свое дело.

dcarrith
источник
2

Тем не менее, я вижу там некоторые папки, такие как / var / run / mysqld и многие другие. Как эти папки создаются при каждой перезагрузке? Есть ли какая-нибудь папка с шаблоном, которая была скопирована в / var / run / (и если да, то какой скрипт это делает), или каждая папка mkdired отдельно, или как?

Как определено в файле Стандарт иерархии/var/run или /runиспользуется для хранения данных во время выполнения летучих.

Все созданные там папки и файлы управляются соответствующей программой, создавшей файлы. Не существует такой вещи, как папка с шаблоном, которая копируется, каждая программа может использовать эту папку для хранения изменчивой информации. Сохраненные данные теряются при перезагрузке системы.

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

Я надеюсь, что все прояснилось!

уш

ortang
источник
1

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

douggro
источник
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 (символическая ссылка на / run запомнить). Если вы хотите создать файл, который будет сохраняться после перезагрузки в / var / run, создайте его в / run и затем перезагрузите.

Надеюсь, что это ответ на ваш вопрос.

nisshh
источник
3
Вы оба ошибаетесь или используете нестандартные настройки. Проверьте сами. крепление | grep / run .... tmpfs on / run типа tmpfs
Стивен К
1
«Если вы хотите создать файл, который будет сохраняться после перезагрузки в / var / run, создайте его в / run, а затем перезагрузите». Это НЕ правильно. tmpfsизменчив и изменения потеряны.
Ортанг