![运行服务时忽略环境变量](https://linux22.com/image/1045613/%E8%BF%90%E8%A1%8C%E6%9C%8D%E5%8A%A1%E6%97%B6%E5%BF%BD%E7%95%A5%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我有一个/ect/init/application.conf
看起来像这样的文件......
start on filesystem and net-device-up IFACE!=lo
stop on runlevel [016]
respawn
export NODE_ENV=production
chdir /home/richie/application
exec /home/richie/.nvm/v0.10.26/bin/node server/app >> /var/log/node.log 2>&1
它旨在Node.js
以生产模式运行应用程序。但是,当我将应用程序作为服务运行时:
sudo service application start
当我输出我的环境变量时,它会在日志中输出此数据:
{ UPSTART_INSTANCE: '',
UPSTART_JOB: 'application',
TERM: 'linux',
PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin',
PWD: '/home/richie/application' }
如您所见,NODE_ENV
在环境变量列表中不存在。知道为什么我导出的环境变量会被忽略吗?我还在我的/etc/environment
文件中添加了以下内容:
NODE_ENV=production
提前致谢!
答案1
“你做错了”。在 upstart 作业中,变量不是用 设置的export
,而是用 设置的env
。因此,请将你的声明更改为
env NODE_ENV=production
那么一切就应该可以正常进行。
请注意,upstart 的工作是不是shell 脚本。它们遵循声明性语法。它们能包含 shell 脚本,但这些脚本必须括在script
..中end script
(另请参见启动前和启动后脚本的类似语法)。