ti-enxame.com

Create diretório em / var / executar / na inicialização

Estou usando o Apache2 e Postgres em execução no Ubuntu Server 10.04.
[.____] Eu removi os scripts de inicialização para ambos os aplicativos e eu estou usando o supervisor para monitorar e controlá-los. O problema que eu corri é que ambos precisam de diretórios in/var/run (com as permissões corretas para os usuários que são executadas) para arquivos PID. Como faço para criar isso durante a inicialização, pois eles precisam ser criados como root e, em seguida, chown para o usuário correto?

editar
[.____] Parece a melhor maneira de isso, isso é criar os diretórios com scripts personalizados. Como não tenho habilidades de script de shell, como faço para fazer isso?

5
Frozenskys

Em resposta a este comentário:

Atualmente não há scripts de inicialização para os services. O daemon Supervisor é iniciado pelos scripts init.d e, em seguida, os outros serviços são iniciados por este serviço, o que não deve ser executado como root.

Se o seu supervisor for iniciado de init.d script, basta criar outro init.d script com as preferências a serem executadas antes que o supervisor seja iniciado (como você consegue isso é totalmente dependente do seu sabor de ** ix).

No seu método start criar diretórios necessários com permissões necessárias.

Em seu método stop rasgar esses diretórios para baixo.

1
Alexander Pogrebnyak

De acordo com Política Debian ,

/var/run e /var/lock podem ser montados como sistemas de arquivos temporários, então o init.d scripts devem lidar com isso corretamente. Isso normalmente valoriza a criação de subdiretórios necessários dinamicamente quando o init.d Script é executado, em vez de incluí-los no pacote e confiar no DPKG para criá-los.

Obviamente, o Ubuntu herda do Debian, e até onde eu sei que esta política está inalterada.

A melhor solução é modificar seus novos scripts de inicialização, tal que, quando os serviços forem iniciados, se esses diretórios não existirem, serão criados.

6
ephemient

Esse tipo de coisa deve ser colocado em "/etc/rc.local". Exemplo:

#!/bin/sh -e
# 
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

if [ ! -d /var/run/foo ]; then
  mkdir /var/run/foo/
  chown user1:group1 /var/run/foo/
fi
if [ ! -d /var/run/bar ]; then
  mkdir /var/run/bar/
  chown user2:group2 /var/run/bar/
fi
exit 0
4
G.Helland

No final, usei este código no script init.d para o processo de supervisor:

while IFS=: read file user group
    do
        if [ -d $file ]; then
            chmod 2775 $file
        else
            install -d -m 2775 -o $user -g $group $file
        fi
    done < "/etc/run_dirs.txt"

Que lê um arquivo contendo linhas com o seguinte formato e cria os dirs e permissões apropriados:

path/to/dir:user:group

1
Frozenskys

Eu vejo algumas opções:

  1. Crie os diretórios no tempo de instalação
  2. Crie um arquivo de todos os diretórios a serem criados na inicialização e, em seguida, escreva um programa que crie todos esses arquivos e executá-lo na inicialização (a partir de um script de inicialização que tenha privilégios de root).

Outras opções que são riffs sobre isso também podem ser feitas para funcionar.

0
Walter