Пытаюсь осмыслить s6 supervisor suite. Я разобрался, как запустить и записать, но я застрял с s6-envdir и не знаю, как его использовать.
Я вижу, что переменная среды установлена, но я не могу получить к ней доступ.
Проиллюстрировать:
# 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} ==="
=== ===
Он не используется, но если я попытаюсь использовать что-то, что уже есть в моем env, проблем нет:
s6-envdir /local/s6/services/ping_stdout/env echo "=== ${ZSH} ==="
=== /home/hoodoo/.oh-my-zsh ===
Я что-то не так понял?
Как использовать переменные, установленные с помощью s6-envdir?
Это правильная форма:
s6-envdir /local/s6/services/ping_stdout/env sh -c 'echo === ${PING_HOST} ==='
Вам нужно запустить подоболочку, которая будет видеть подготовленные переменные env s6-envdir. Также вам нужны одинарные кавычки, чтобы убедиться, что подоболочка выполнит замену и распечатает переменную.
Если вы запустите демон, это должно быть примерно так:
s6-envdir /local/s6/services/ping_stdout/env sh -c 'exec /full/path/to/your/executable'
В exec
необходим, чтобы не было лишней оболочки. Это необходимо, чтобы убедиться, что вы сигнализируете процессу напрямую через s6.