Como as pastas criadas em / var / run em cada reinicialização

44

Em ubuntus recentes (especificamente, o que mais me interessa é 12.04) /var/run é tmpfs e, portanto, eu suponho que ele comece vazio a cada reinicialização.

No entanto, vejo algumas pastas, como /var/run/mysqld e muitas outras. Como essas pastas foram criadas em cada reinicialização? Existe alguma pasta de modelo que copiou para /var/run/ (e em caso afirmativo, qual script faz isso), ou cada pasta mkdir 'separadamente ou o que?

EDIT:
Por favor, não responda que /var/run é persistente, ou que /run é persistente. Porque não é.

Mesmo que seja assim no seu sistema, não é assim em um 12.04 normal.

    
por Sandman4 02.06.2013 / 11:59

6 respostas

55

(Agradecimentos a @Zulakis e uma resposta no Serverfault por apontar que essa resposta não acompanhava o andamento do Ubuntu desenvolvimento.)

Com a adoção de systemd em 15.04 , Existe agora um mecanismo centralizado para a criação de arquivos temporários e diretórios como esses. Um serviço que deseja usar esse método pode remover os comandos mkdir em seu próprio script de inicialização e, em vez disso, colocar um arquivo .conf em /etc/tmpfiles.d , /run/tmpfiles.d ou /usr/lib/tmpfiles.d , com os serviços do Ubuntu parecendo preferir a última opção. Por exemplo, meu sistema agora tem:

$ 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

O d significa criar um diretório, se ele ainda não existir, depois disso, o caminho e o restante, as permissões, o usuário e o grupo. Esses diretórios serão criados independentemente de o serviço correspondente já ter sido iniciado.

Para obter a documentação completa, consulte man tmpfiles.d .

VELHA RESPOSTA PRE-SYSTEMD:

Parece que eles são criados dinamicamente por serviços individuais conforme eles são iniciados:

$ 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

Eu acredito que este é o único que lida com o 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 diz que o formulário -d irá "criar todos os componentes dos diretórios especificados".

    
por Paul 10.06.2013 / 16:30
5

Para qualquer um que se deparar com este tópico, porque você está procurando uma solução para configurar um aplicativo de modo que ele crie o diretório em /var/run para que ele possa armazenar seu arquivo de meia ou pid… . Eu me deparei com este segmento porque eu queria armazenar o arquivo de meia do MySQL em /var/run/mysqld . Então, depois de me deparar com este segmento, comecei a procurar nos arquivos /etc/init por exemplos. O dbus foi bom. E eu criei essa configuração de inicialização do 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 

A parte do script de pré-inicialização funcionou.

    
por dcarrith 20.03.2014 / 04:37
4

A nova pasta /run montada em tmpfs permite que programas como o udev, lvm e mdadm mantenham os dados em tempo de execução do initrd até o desligamento.

/var é um diretório padrão de qualquer sistema Linux / UNIX - ele significa "variável" e é um local onde muitos logs, cahces, MAS também programam arquivos de configurações variáveis e até mesmo alguns bancos de dados de configuração do sistema residem. / p>

A maioria das coisas em /var deve ser devidamente removida e regulada pelo sistema. Seus arquivos de swap para memória virtual também vivem em /var , então não mexa com isso. /var/run também contém muitas informações de status e parâmetro de daemans de processo em execução ativa.

Este diretório contém dados de informações do sistema que descrevem o sistema desde que ele foi inicializado. Os arquivos nesse diretório devem ser limpos (removidos ou truncados, conforme apropriado) no início do processo de inicialização. Os programas podem ter um subdiretório de /var/run ; Isso é incentivado para programas que usam mais de um arquivo de tempo de execução.

Bem, desde que /var/run esteja montado como tmpfs. Isso significa que está totalmente vazio quando a sua máquina inicializa e é para ser assim para evitar que coisas como daemons não sejam iniciados por causa de um arquivo PID que sobrou.

Os scripts de inicialização geralmente criam os diretórios de que precisam antes de usá-los. Se você quiser armazenar um arquivo PID, coloque-o em /var/run diretamente ou crie um diretório antes de criar o arquivo PID. Este não é o lugar para armazenar dados que precisam permanecer lá durante as reinicializações.

Fontes: nome do caminho & amp; Guia do Administrador do Sistema Linux

    
por Mitch 11.06.2013 / 08:59
2
  

No entanto, vejo algumas pastas, como / var / run / mysqld e numerosas   outras. Como essas pastas foram criadas em cada reinicialização? Existe algum   pasta de modelo que copiou para / var / run / (e em caso afirmativo, qual script   faz isso), ou cada pasta mkdired separadamente, ou o que?

Conforme definido no Padrão de hierarquia de arquivos , o /var/run ou /run é usado para armazenar dados de tempo de execução voláteis.

Todas as pastas e arquivos criados ali são gerenciados pelo respectivo programa que criou os arquivos. Não existe uma pasta de modelos copiada, cada programa pode usar essa pasta para armazenar informações voláteis. Os dados armazenados são perdidos quando o sistema é reinicializado.

Uma coisa comum para usar a pasta /run é armazenar o pid de daemons em execução, arquivos de marcadores que contêm o número do processo de um processo. Eles são usados principalmente para os scripts de início / parada que você pode encontrar, por exemplo, em /etc/init.d/

Espero que tenha deixado as coisas claras para você!

br

    
por ortang 11.06.2013 / 14:06
1

Sua suposição não é absolutamente correta. A localização da pasta /var é negociável - ou seja, você pode usar uma partição ou volume alternativo no qual localizar a pasta /var . Independentemente de onde a pasta /var está localizada, a pasta /var/run é um link simbólico para a pasta /run e seu conteúdo permanece após as reinicializações, embora muitos dos arquivos em /run sejam gerados ou modificados na inicialização pelos serviços iniciados durante a inicialização. Portanto, são os serviços - como mysqld - que exigem o carregamento de arquivos no diretório /var/run e são configurados para criar subdiretórios se eles não existirem atualmente.

    
por douggro 02.06.2013 / 16:19
-2

douggro está absolutamente certo, / var / run é montado como tmpfs e / var / run é um link simbólico para / run que é persistente através de reinicializações, então qualquer coisa que entra / executa também aparecerá em (e permanecerá) / var / run.

Assim, qualquer serviço de inicialização como o mysqld, que é um daemon que é iniciado na inicialização, cria arquivos em / run, também terá arquivos visíveis em / var / run (link simbólico para / run remember). Se você quiser criar um arquivo que persistirá durante uma reinicialização em / var / run, crie-o em / run e, em seguida, reinicialize.

Espero que isso responda à sua pergunta.

    
por nisshh 06.06.2013 / 16:15