首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Upstart中连接两个字符串环境/w env stanza?

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

Stack Overflow用户
提问于 2013-07-15 16:25:31
回答 1查看 1.9K关注 0票数 3

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

代码语言:javascript
复制
env SERVICE_ROOT="/data/service_root"
env LOG_DIR="$SERVICE_ROOT/logs"

我用以下命令检查了所有变量..

代码语言:javascript
复制
echo "\n`env`" >> /tmp/listener.log 2>&1

我期望日志是“/data/service_root/ $LOG_DIR”,但我得到的是..

代码语言:javascript
复制
SERVICE_ROOT=/data/service_root
LOG_DIR=$SERVICE_ROOT/logs

我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-16 09:50:25

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

Upstart允许您设置作业可以访问的环境变量,作业配置文件在其中定义了这些环境变量。

8.2 Environment Variables中所述

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

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

代码语言:javascript
复制
# /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可用于同一块中调用的进程。

代码语言:javascript
复制
#!/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的内容将为:

代码语言:javascript
复制
running test.sh
SERVICE_ROOT=/data/service_root
LOG_DIR=/data/service_root/logs

在syslog中,您将发现:

proc/

/fd/9:proc/self/fd/9:proc

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17649754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档