s6 supervisor: conjunto de variáveis com s6-envdir não pode ser usado

1

Estou tentando envolver minha cabeça em torno do S6 Supervisor Suite. Eu descobri run and log mas estou preso com o s6-envdir e não tenho certeza de como usá-lo.

Eu vejo que a variável de ambiente é definida, mas não consigo acessá-la.

Para ilustrar:

# According to the docs, set a variable
cat /local/s6/services/ping_stdout/env/PING_HOST
ya.ru
# Make sure there's no such variable in my current env
env | grep PING_HOST
echo $?
1
# Make sure it gets exported if I use s6-envdir
s6-envdir /local/s6/services/ping_stdout/env env | grep PING_HOST
PING_HOST=ya.ru
# Now try to get it printed
s6-envdir /local/s6/services/ping_stdout/env echo "=== ${PING_HOST} ==="
===  ===

Não é usado, mas se eu tentar usar algo que já está no meu env, não há problema:

s6-envdir /local/s6/services/ping_stdout/env echo "=== ${ZSH} ==="
=== /home/hoodoo/.oh-my-zsh ===

Eu recebi algo errado?

Como uso as variáveis configuradas com s6-envdir?

    
por Roman Grazhdan 07.09.2016 / 19:27

1 resposta

1

Esta é a forma correta:

s6-envdir /local/s6/services/ping_stdout/env sh -c 'echo === ${PING_HOST} ==='

Você precisa iniciar um subshell que verá as variáveis de env s6-envdir provisionadas. Além disso, você precisa de aspas simples para garantir que a subshell faça a substituição e imprima a variável.

Se você iniciar um daemon, deverá ser assim:

s6-envdir /local/s6/services/ping_stdout/env sh -c 'exec /full/path/to/your/executable'

O exec é necessário para que não haja sobra de shell extra. Isso é necessário para garantir que você sinalize o processo diretamente via s6.

    
por 07.09.2016 / 21:12