我需要导出一个变量FOO=stringhere
以便系统进程可以使用它。我想做这件事的地方是 Upstart 工作。
不幸的是,我尝试按照Upstart手册去做env FOO=stringhere
http://upstart.ubuntu.com/cookbook/#environment-variables
但系统启动后,echo $FOO
什么也没有返回。
我是否试图做一些不可能的事情,或者有什么我应该知道的陷阱吗?
答案1
正如您所引用的页面所说,
Upstart 允许您设置环境变量这些作业可以访问其作业配置文件中定义的作业。
表示变量是在使用的环境中设置的由系统守护进程在启动时。这用户登录后会单独配置环境。
如果你想检查守护进程是否知道你设置的变量,你可以通过以下方式测试:暂时地修改其启动脚本并添加类似logger "=============== The variable FOO is set to $FOO ====================="
.然后您应该会看到启动期间记录的信息(/var/log/messages
例如查看)。
答案2
在您的示例中,该变量可以在同一文件中使用。
来自新贵食谱的注释。
请注意,作业配置文件无权访问用户的环境变量,甚至超级用户也无权访问。这是不可能的,因为创建的所有作业进程都是 init 的子进程,而 init 没有用户环境。
来自新贵食谱的进一步解释。
假设您env TESTING=123
在 *.conf 文件中写入,那么您可以在下面的脚本块中使用此变量(您使用的那个)
script
# prints "TESTING='123'" to system log
logger -t $0 "TESTING='$TESTING'"
end script
或者更复杂的方法可以让您在“监听”您的作业的作业中使用变量:
# /etc/init/A.conf
start on wibble
export foo
# /etc/init/B.conf
start on A
script
logger "value of foo is '$foo'"
end script
答案3
您想要完成的任务更适合由登录 shell 完成/etc/profile
。source
export foo="String here"