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

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

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

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

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

60
задан 20 March 2014 в 08:25

6 ответов

(Спасибо @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 «создаст все компоненты указанных каталогов».

0
ответ дан 20 March 2014 в 08:25

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

/var является стандартным каталогом любой системы Linux / UNIX - он обозначает «переменная» и является местом, где хранится множество журналов, файлов, НО, также программные файлы настроек переменных и даже некоторые базы данных конфигурации системы. [ 119]

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

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

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

Скрипты запуска обычно создают нужные им каталоги перед их использованием. Если вы хотите сохранить PID-файл, либо поместите его в /var/run напрямую, либо создайте каталог перед созданием PID-файла. Здесь не место для хранения данных, которые должны оставаться там при перезагрузках.

Источники: Pathname & amp; Руководство системного администратора Linux

0
ответ дан 20 March 2014 в 08:25

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

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

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

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

. Надеюсь, вы прояснили это!

br

0
ответ дан 20 March 2014 в 08:25

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

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

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

0
ответ дан 20 March 2014 в 08:25

Для всех, кто сталкивался с этой темой, потому что вы ищете решение о том, как вы можете настроить приложение так, чтобы оно создавало каталог в /var/run, чтобы оно могло хранить свой файл носка или 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 

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

0
ответ дан 20 March 2014 в 08:25

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

0
ответ дан 20 March 2014 в 08:25

Другие вопросы по тегам:

Похожие вопросы: