问题在 Upstart 中寻找变量

tec*_*ker 3 bash upstart source 12.04

我正在尝试使用/etc/environment在 12.04 上运行的 upstart 脚本中定义的变量。

我能够将变量导出到子进程,但由于某种原因,我无法在 Upstart 脚本节本身中使用它们。

这有效:

script
    . /etc/environment
    export NODE_ENV
    # node is able to read the NODE_ENV, wonderful!
    /usr/local/bin/node /path/to/app/app.js
end script
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在该节中引入一些条件逻辑,那么它将失败:

script

    . /etc/environment
    export NODE_ENV

    # ${NODE_ENV} is not set inside the stanza
    if [[ ${NODE_ENV} = 'production' ]]; then

        # this will never run
        /usr/local/bin/node /path/to/app/app.js
    fi

end script
Run Code Online (Sandbox Code Playgroud)

任何想法如何从节内的源文件访问变量?

Rob*_*sak 5

这一行:

if [[ ${NODE_ENV} = 'production' ]]; then
Run Code Online (Sandbox Code Playgroud)

在符合 POSIX 的 shell 中无效,但似乎是有效的 bash。我没有看到 upstart 在script任何地方记录的节中默认使用的 shell ,但假设它使用/bin/sh是合理的,这不是 Debian/Ubuntu 系统上的 bash。

尝试:

if [ "${NODE_ENV}" = 'production' ]; then
Run Code Online (Sandbox Code Playgroud)

反而。