运行服务时忽略环境变量

运行服务时忽略环境变量

我有一个/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(另请参见启动前和启动后脚本的类似语法)。

http://upstart.ubuntu.com/getting-started.html

相关内容