我正试图围绕 s6 主管套件。我已经想出了运行和日志,但我被 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} ==="
=== ===
它没有被使用,但如果我尝试使用我的环境中已经存在的东西,没问题:
s6-envdir /local/s6/services/ping_stdout/env echo "=== ${ZSH} ==="
=== /home/hoodoo/.oh-my-zsh ===
我是不是搞错了什么?
如何使用 s6-envdir 设置的变量?
这是正确的形式:
您需要启动一个子shell,它将看到已配置的环境变量 s6-envdir。您还需要单引号以确保子shell 将执行替换并打印变量。
如果你启动一个守护进程,它应该是这样的:
这
exec
是必需的,因此不会有剩余的额外外壳。这是确保您直接通过 s6 向进程发送信号所必需的。