В последнее время Ubuntus (в частности, меня больше всего интересует 12.04) /var/run
- это tmpfs, и, таким образом, я предполагаю, что он начинается пустым с каждой перезагрузкой.
Тем не менее, я вижу там некоторые папки, такие как /var/run/mysqld
и многие другие. Как эти папки создаются при каждой перезагрузке? Есть ли какая-нибудь папка с шаблоном, которая была скопирована в /var/run/
(и если да, какой скрипт это делает), или каждая папка mkdir
'редактировалась отдельно, или что?
РЕДАКТИРОВАТЬ:
Пожалуйста , не отвечайте, что /var/run
является постоянным или что /run
является постоянным. Потому что это не так.
Даже если это так в вашей системе, это не так в обычной 12.04.
(Спасибо @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 «создаст все компоненты указанных каталогов».
Новая папка /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 sup>
Тем не менее, я вижу там несколько папок, например / var / run / mysqld и многие другие. Как эти папки создаются при каждой перезагрузке? Есть ли какая-нибудь папка с шаблоном, которая была скопирована в / var / run / (и если да, какой скрипт это делает), или каждая папка mkdired отдельно, или что?
blockquote>Как определено в Стандарт файловой иерархии ,
/var/run
или/run
используется для хранения изменчивых данных времени выполнения.Все папки и файлы, созданные в них, управляются соответствующей программой, создавшей файлы. Не существует такой вещи, как папка с шаблоном, которая копируется, каждая программа может использовать эту папку для хранения изменчивой информации. Сохраненные данные теряются при перезагрузке системы.
Обычно для использования папки
/run
хранитсяpid
запущенных демонов, файлов маркеров, которые содержат номер процесса. Они в основном используются для сценариев запуска / остановки, которые вы можете найти, например, в/etc/init.d/
. Надеюсь, вы прояснили это!
br
douggro абсолютно прав, / var / run монтируется как tmpfs, а / var / run является символической ссылкой на / run, которая постоянна при перезагрузках, поэтому все, что входит / запускается, также появляется (и остается) /var/run.
Так что любые загрузочные сервисы, такие как mysqld, который является демоном, запускаемым во время загрузки, который создает файлы в / run, также будут иметь файлы, видимые в / var / run (символическая ссылка на / run запомнить). Если вы хотите создать файл, который будет сохраняться после перезагрузки в / var / run, создайте его в / run и затем перезагрузите.
Надеюсь, это ответит на ваш вопрос.
Для всех, кто сталкивался с этой темой, потому что вы ищете решение о том, как вы можете настроить приложение так, чтобы оно создавало каталог в /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
Предварительная часть скрипта сделала свое дело.
Ваше предположение не совсем верно. Местоположение папки /var
является договорным, то есть вы можете использовать альтернативный раздел или том, на котором можно найти папку /var
. Независимо от того, где находится папка /var
, папка /var/run
является символической ссылкой на папку /run
, и ее содержимое остается после перезагрузок, хотя многие файлы в /run
создаются или изменяются при загрузке службами, запускающимися во время загрузки. Таким образом, именно службы, такие как mysqld
, вызывают загрузку файлов в каталог /var/run
и предназначены для создания подкаталогов, если их в данный момент не существует.