【发布时间】:2015-10-01 17:04:19
【问题描述】:
这是我的计算引擎实例的启动脚本的一部分
# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/opt/app
command=sudo node app.js
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF
如果你注意到这条线
command=sudo node app.js
原来只是
command=node app.js
但由于我的应用程序正在侦听端口 80,因此我对其进行了修改,以便获得 root 访问权限。当我的虚拟机启动时,它会执行脚本,但我无法访问我的网站,当我 SSH 进入实例并键入时
sudo node app.js
但是,一切正常。启动脚本中不能有 sudo 命令?
【问题讨论】:
-
为什么
supervisord没有以root 身份运行?它以什么用户身份运行?与您成功运行sudo node app.js时使用的用户相同吗?您的sudo配置是否设置了requiretty选项? -
如何以 root 身份运行 supervisord?什么是requiretty选项?这是“在谷歌计算引擎上部署 nodejs 应用程序”教程中的代码。完全没看懂。
-
我应该添加整个启动脚本吗?
-
将
user=nodeapp更改为user=root就足够了,它将以root身份启动,因为supervisord已经以root身份运行。保留command=node app.js不带sudo。 -
@alvits 完美。谢谢
标签: linux node.js debian google-compute-engine sudo