O trabalho do Upstart não pode criar o diretório em / var / run

5

Eu tenho a seguinte configuração em /etc/init/foo.conf no Ubuntu 12.04.4:

description "Foo"

start on filesystem or runlevel [2345]
stop on runlevel [!2345]

pre-start script
    mkdir -p -m 0775 /var/run/foo
    chown foo:foo /var/run/foo
end script

setuid foo
setgid foo
exec /usr/local/bin/foo

No entanto, quando isso é executado na inicialização e quando tento executá-lo manualmente com sudo start foo , recebo o seguinte erro em /var/log/upstart/foo.log :

mkdir: cannot create directory '/var/run/foo': Permission denied

Por que isso está ocorrendo e como posso corrigi-lo?

    
por DanielGibbs 26.07.2014 / 14:55

1 resposta

4

Como o livro de receitas do Upstart menciona: Observação que todos os processos (pré-início, pós-parada, etc.) serão executados conforme especificado pelo usuário.

Como resultado, mkdir do diretório pessoal do usuário falhará com os resultados da permissão negada.

Uma solução é criar como raiz o diretório, chown para o usuário alvo e depois executar o executável como usuário.

description "Foo"

start on filesystem or runlevel [2345]
stop on runlevel [!2345]

pre-start script
    mkdir -p -m 0775 /var/run/foo
    chown foo:foo /var/run/foo
end script

exec sudo -u foo_user /usr/local/bin/foo

onde foo_user é o usuário alvo que iniciará o executável

Referência sobre como executar um usuário diferente

    
por Stef K 26.07.2014 / 20:18