Почему я не могу подключиться к этой услуге при запуске через Upstart?

У меня есть веб-сервис, написанный на Голанге, который мне нужно запустить с помощью Upstart.

Я могу запустить исполняемый файл службы (именованное слово) на порту 5555 из его каталога вручную, например, так:

PORT=5555 ./word

Затем curl -i http://127.0.0.1:5555/api/word возвращает правильный ответ (что-то вроде JSON). [1112 ]

Теперь мне нужно запустить этот сервис через Upstart. Я написал этот скрипт (называемый word.conf):

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

chdir /home/word

setgid word
setuid word

export PORT=5555
exec ./word

Я запускаю его через sudo start word

status word, затем говорит мне, что служба работает, и я не вижу ошибки в журналах ошибок Upstart.

При попытке снова обратиться к службе через curl -i http://127.0.0.1:5555/api/word я получаю ошибку curl: (7) couldn't connect to host.

Кажется, это должно быть какой-то проблемой с разрешениями, но я не могу это точно определить.

Я попытался удалить setgid и setuid и бежать без удачи. У меня есть пользователь с именем word.

Я нахожусь на Ubuntu 12.04.3.

Есть идеи?

0
задан 14.04.2020, 17:01

2 ответа

Если это ваш полный сценарий, то у него две простые проблемы. exec должно быть в script [...] end script, например:

script
    exec ./word
end script

, и переменная экспорта должна быть сначала объявлена ​​со строфой env:

env PORT=5555
export PORT

Таким образом, весь сценарий должно выглядеть так:

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

Я бы также вместо того, чтобы позвонить ./word, сначала позвонил бы переводчику. Если это скрипт bash:

exec /usr/bin/env bash ./word

python:

exec /usr/bin/env python word

Ссылки:

1
ответ дан 14.04.2020, 17:02

Вам нужно определить переменную окружения, используя env, и указать интерпретатор для вызова вашего скрипта:

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

chdir /home/word

setgid word
setuid word

env PORT=5555
export PORT

exec go run word

Возможно, вам не нужно «экспортировать PORT», если это единственный процесс, который его использует, и если интерпретатор определен в сценарии, вам, возможно, даже не потребуется включать его в exec.

0
ответ дан 14.04.2020, 17:02

Теги

Похожие вопросы