Crie o diretório em / var / run / na inicialização

5

Estou usando o apache2 e o postgres rodando no Ubuntu Server 10.04.
Eu removi os scripts de inicialização para esses dois aplicativos e estou usando o supervisor para monitorá-los e controlá-los. O problema que eu tenho é que ambos precisam de diretórios em / var / run (com as permissões corretas para os usuários que eles executam) para arquivos pid. Como faço para criá-los durante a inicialização, pois eles precisam ser criados como root e, em seguida, chown para o usuário correto?

Editar
Parece que a melhor maneira de fazer isso é criar os diretórios com scripts de inicialização personalizados. Como eu não tenho nenhuma habilidade de script de shell, como eu faço isso?

    
por Frozenskys 15.09.2010 / 23:19

5 respostas

1

Em resposta a este comentário:

There are currently no startup scripts for the servcies. The supervisor daemon is started by the init.d scripts and then the other services are started by this service, which should not run as root.

Se o seu supervisor for iniciado a partir do script init.d , basta criar outro script init.d com as preferências a serem executadas antes que o supervisor inicie (como isso é totalmente dependente do seu sabor de ** IX). / p>

No método start , crie os diretórios necessários com as permissões necessárias.

No método stop , desative esses diretórios.

    
por 16.09.2010 / 13:56
6

De acordo com a política do Debian ,

/var/run and /var/lock may be mounted as temporary filesystems, so the init.d scripts must handle this correctly. This will typically amount to creating any required subdirectories dynamically when the init.d script is run, rather than including them in the package and relying on dpkg to create them.

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

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

    
por 16.09.2010 / 03:56
4

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
    
por 31.05.2013 / 11:10
1

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"

O que lê um arquivo contendo linhas com o seguinte formato e cria os diretórios e permissões apropriados:

path/to/dir:user:group

    
por 16.09.2010 / 16:15
0

Eu vejo algumas opções:

  1. Crie os diretórios no momento da instalação
  2. Crie um arquivo de todos os diretórios a serem criados na inicialização, em seguida, escreva um programa que crie todos esses arquivos e execute-o na inicialização (de um script de inicialização que tenha privs raiz).

Outras opções que são riffs sobre isso também poderiam funcionar.

    
por 16.09.2010 / 02:48