s6 supervisor:用s6-envdir设置的variables不能使用

我试图把我的头围绕在s6pipe理员套件。 我已经想出了运行和日志,但我坚持与s6 envdir,我不知道如何使用它。

我看到环境variables被设置,但我无法访问它。

为了显示:

# 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设置的variables?

这是正确的forms:

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

你需要启动一个能看到envvariabless6-envdir的子shell。 你也需要单引号,以确保子shell将进行replace和打印variables。

如果你启动一个守护进程,它应该是这样的:

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

exec是必要的,所以不会有剩余的额外的shell。 这是确保你直接通过s6发信号的过程。