我的服务器有一个Upstart脚本,如下所示:
description "myapp node.js server" start on runlevel [2345] stop on shutdown env NODE_ENV=production env CUSTOM=somevalue exec sudo -u nodejs /usr/local/bin/node /opt/myapp/app.js >> /var/log/nodejs/myapp.log 2>&1 post-start script NODE_PID=`status myapp | egrep -oi '([0-9]+)$' | head -n1` echo $NODE_PID > /var/run/nodejs/myapp.pid end script
但是,该应用没有看到NODE_ENV设置为生产。 实际上,如果我在应用程序中使用console.log(process.env),我不会看到NODE_ENV或CUSTOM。 任何想法发生了什么?
顺便说一句,NODE_ENV =生产节点app.js工作得很好。
新贵停止运行
从cron作业开始一个shell脚本的服务(upstart)
在Bourne Shell中刷新输出
如何在Amazon Linux上升级/安装Upstart deamon 1.5版
新贵的python脚本
如何用virtualenv编写Celery(django-celery)的Ubuntu Upstart工作
无法让cronjob获得服务的状态
在Ubuntu上重新生成Tomcat的Upstart脚本
增加Ubuntu / Upstart(initctl)的最大打开文件
在虚拟环境中获取Django以通过Upstart运行
从sudo手册页 (Ubuntu版sudo)
有两种不同的方式来处理环境变量。 默认情况下,启用env_reset sudoers选项。 这会导致除了env_check和env_keep sudoers选项所允许的调用过程的变量外,还将使用包含TERM,PATH,HOME,SHELL,LOGNAME,USER和USERNAME的最小环境来执行命令。 有效的白名单环境变量。
Sudo正在重新设置环境。 在sust和init脚本中使用su和sudo是令人沮丧的一个方面。 最近版本的upstart支持通过setuid/setgid指令来指定uid / gid而不使用sudo,如下例所示。 还要注意使用chdir 。
start on filesystem and started networking respawn chdir /var/www/yourapp setuid yourapp setgid yourapp env NODE_ENV=production env PATH=/usr/local/bin:/usr/bin:/bin env CUSTOM=somevalue exec /usr/local/bin/node app.js | /usr/bin/multilog s1024000 /var/log/yourapp 2>&1
对于旧版本的新贵,这是我曾经做过的工作。
description "start and stop the example.com node.js server" start on filesystem and started networking respawn chdir /path/to/your/code exec su -c 'PATH=$PWD/node/bin NODE_ENV=$(cat node_env.txt) ./node/bin/node app/server.js' www-data >> tmp/stdout.log 2>&1
请注意,我只是在我的应用程序根目录中设置了一个node_env.txt文件来设置生产模式,因为我讨厌环境变量 。 如果你愿意,你可以在那里做NODE_ENV=production 。
只是为了记录。 当你的Upstart版本没有实现setuid时, Upstart Cookbook建议使用start-stop-daemon而不是su或sudo 。
但是,除非你仍然使用只有Upstart 0.6.5版本的10.04 LTS ( Lucid Lynx ),否则你应该使用setuid/setgid指令。
这一直在为我设置节点环境变量的新贵。
#!upstart start on runlevel [2345] stop on runlevel [016] respawn script echo $$ > /var/run/app.pid exec sudo NODE_ENV=production /opt/node/bin/node /opt/myapp/app.js >> /var/log/app.sys.log 2>&1 end script
visudo有一条线来定义要保留的环境变量。
sudo visudo
并添加你的env到:
Defaults env_keep="YOUR_ENV ..."
并重新启动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。