使用 start 在启动时运行节点应用程序

使用 start 在启动时运行节点应用程序

我对 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 的基本属性。

相关内容