我对 node_module-path 有问题。有人能告诉我我做错了什么吗?
跑步
exec sudo -u www-data /usr/bin/node /etc/node/app.js
给我
Error: Cannot find module 'connect'
我有这个配置(/etc/init/applicationserver.conf):
start on started mountall
stop on shutdown
respawn
respawn limit 99 5
script
export HOME="/"
export NODE_PATH="/usr/lib/node_modules"
exec sudo -u www-data /usr/bin/node /etc/node/app.js >> /var/log/applicationserver.log 2>&1
end script
post-start script
end script
似乎找不到已安装的模块。我已验证 connect 位于 /usr/lib/node_modules 下,如果我从 root 或我的帐户导出 NODE_PATH,它就可以正常工作。
答案1
嗯,一般来说这不是开始某件事的最佳方式。具有正确所有权的包装器脚本可以在没有 sudo 的情况下完成相同的工作。
您的问题在于 sudo 的使用,无论上下文是否为 upstart 作业。您定义的环境变量未被传递。将“-E”开关添加到 sudo 以更正此问题。
如果您使用 www-data 拥有的包装器来启动该进程,则不会出现此问题,因为您不需要 sudo。有很多示例作业会创建变量并将其传递给新的子进程。这是 fork/clone 的基本属性。