Por que não consigo me conectar a este serviço quando iniciado via Upstart?

0

Eu tenho um serviço da web escrito em Golang que preciso iniciar usando o Upstart.

Eu posso executar o executável do serviço (palavra nomeada) na porta 5555 de dentro do diretório manualmente assim:

PORT=5555 ./word

Em seguida, curl -i http://127.0.0.1:5555/api/word retorna a resposta correta (que é um pouco de JSON).

Agora, preciso executar esse serviço por meio do Upstart. Eu escrevi este script (chamado word.conf):

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

chdir /home/word

setgid word
setuid word

export PORT=5555
exec ./word

Eu executo via sudo start word

status word , em seguida, informa que o serviço está em execução e não vejo erros nos logs de erros do Upstart.

Ao tentar acessar o serviço novamente por meio de curl -i http://127.0.0.1:5555/api/word , recebo um erro curl: (7) couldn't connect to host .

Parece que tem que haver algum tipo de problema de permissões, mas não consigo identificá-lo.

Eu tentei remover setgid e setuid e continuar sem sorte. Eu tenho um usuário chamado word .

Estou no Ubuntu 12.04.3.

Alguma idéia?

    
por Carter 09.10.2013 / 02:22

2 respostas

1

Se esse é o seu script completo, então há dois problemas simples. exec deve estar em script [...] end script assim:

script
    exec ./word
end script

e a variável de exportação deve ser declarada primeiro com uma sub-rotina env :

env PORT=5555
export PORT

Assim, todo o script deve se parecer com:

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

chdir /home/word

setgid word
setuid word

env PORT=5555
export PORT

script
    exec ./word
end script

Eu também gostaria de chamar ./word chamando o intérprete primeiro. Se é um script bash:

exec /usr/bin/env bash ./word

python:

exec /usr/bin/env python word

Referências:

por Braiam 09.10.2013 / 03:29
0

Você precisa definir sua variável de ambiente usando env e especificar o intérprete para chamar seu script:

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

chdir /home/word

setgid word
setuid word

env PORT=5555
export PORT

exec go run word

Você pode não precisar 'exportar PORT' se este for o único processo que o utiliza, e se o interpretador estiver definido no script, você pode nem precisar incluí-lo no exec.

    
por thinkmassive 12.02.2014 / 03:21