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

42

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

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

EDIT:
Пожалуйста, не отвечайте, что /var/run является постоянным или что /run является постоянным. Потому что это НЕ.

Даже если это так ваша система , это не так регулярно 12.04.

    
задан Sandman4 02.06.2013 в 11:59
источник

6 ответов

53

(Спасибо @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 .

OLD PRE-SYSTEMD ANSWER:

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

$ 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 будет "создавать все компоненты указанных каталогов".

    
ответ дан Paul 10.06.2013 в 16:30
источник
5

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

Часть скрипта перед запуском сделала трюк.

    
ответ дан dcarrith 20.03.2014 в 04:37
4

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

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

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

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

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

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

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

    
ответ дан Mitch 11.06.2013 в 08:59
2
  

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

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

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

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

Надеюсь, это ясно объяснило вам!

ш

    
ответ дан ortang 11.06.2013 в 14:06
1

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

    
ответ дан douggro 02.06.2013 в 16:19
-2

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

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

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

    
ответ дан nisshh 06.06.2013 в 16:15