如何在Upstart中连接两个字符串环境/ w env节?

时间:2013-07-15 08:25:31

标签: upstart

这是我的.conf文件的一部分。

env SERVICE_ROOT="/data/service_root"
env LOG_DIR="$SERVICE_ROOT/logs"

我用以下的方式检查了所有变量..

echo "\n`env`" >> /tmp/listener.log 2>&1

我希望$ LOG_DIR是“/ data / service_root / logs”,但我得到的是......

SERVICE_ROOT=/data/service_root
LOG_DIR=$SERVICE_ROOT/logs

我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

作业配置文件本身无法访问已定义的环境变量。

  

Upstart允许您设置环境变量,可供作业访问,

其作业配置文件。

8.2 Environment Variables中所述:

  

请注意,作业配置文件无权访问用户的环境变量,甚至超级用户也无法访问。这是不可能的,因为创建的所有作业进程都是init的子级,没有用户的环境。

定义的变量$ SERVICE_ROOT可以被定义的作业访问。

# /etc/init/test.conf
env SERVICE_ROOT="/data/service_root"

script
  export LOG_DIR="$SERVICE_ROOT/logs"
  # prints "LOG_DIR='/data/service_root/logs'" to system log
  logger -t $0 "LOG_DIR='$LOG_DIR'"
  exec /home/vagrant/test.sh >> /tmp/test.log
end script

脚本块中导出的变量$ LOG_DIR可用于同一块内调用的进程。

#!/bin/bash -e
# /home/vagrant/test.sh
echo "running test.sh"
echo "\n`env`" | grep 'LOG_DIR\|SERVICE_ROOT'

运行sudo start test /tmp/test.log后,内容将是:

running test.sh
SERVICE_ROOT=/data/service_root
LOG_DIR=/data/service_root/logs

在系统日志中,您会找到:

  

Jul 16 01:39:39 vagrant-ubuntu-raring-64 / proc / self / fd / 9:LOG_DIR ='/ data / service_root / logs'