【问题标题】:start restricted node.js app on boot在启动时启动受限的 node.js 应用程序
【发布时间】:2015-06-12 20:11:06
【问题描述】:

当我的树莓派启动时,我无法运行 node.js 应用程序。

脚本没有什么特别之处——只是一个 hello world 网络服务器。但是,它在 80 端口上运行。

var http = require('http');
http.createServer(function (req, res) {
   res.writeHead(200, {'Content-Type': 'text/plain'});
   res.end('Hello Apadfdche!\n');
}).listen(80, '192.168.0.1');

如果我运行这只是“node script.js”,我会收到权限错误,因为低端口范围内的所有内容都需要特殊权限 - 使用“sudo”运行修复了该问题。

但是,当我的树莓派启动时,如何自动启动我的节点应用程序?

我在 /etc/init.d 中创建了一个 bash 脚本

当我使用“sudo /etc/init.d/myscript”从命令行手动调用我的 bash 脚本时,它会毫无问题地启动 nodejs 网络服务器。但是当我让它在启动时通过 init.d 正常执行时,它失败了。在其中我尝试以两种方式调用节点

第一:

/usr/local/bin/node /var/www/server.js

第二:

su -l "pi" -c "/usr/local/bin/node /var/www/server.js"

在这两种情况下,我的节点应用程序都会抛出与我尝试在没有“sudo”的情况下从命令行运行它时相同的异常,所以我假设它仍然没有获得运行所需的正确权限。尝试使用“root”而不是“pi”没有帮助。

如何在我的 pi 启动时运行我的脚本?对于它的价值,我没有必须使用 init.d,只要它运行,我就很高兴。

【问题讨论】:

  • 对于系统管理员来说,更好的地方可能是 serverfault.com 或 unix.stackexchange.com(并不是说这是题外话)。

标签: linux node.js bash raspberry-pi


【解决方案1】:

我知道有几种方法。

可以通过chkconfig设置为开机启动,但是自制服务这个方法我不太熟悉

另一种方法是在 crontab 中将其设置为在启动时启动:
1. 运行:sudo crontab -e
2.您的默认编辑器应该打开,如果没有为root用户设置任何cron作业,您将看到一个空文件或一些看起来像“0 * * * * echo 'hello world'”的条目 3. 在“@reboot bash /etc/init.d/myscript”中写入不带引号的文件
4. 保存并关闭并重新启动您的服务器以查看它是否有效。

这实际上将在重新启动/启动时运行命令

【讨论】:

  • 恐怕仍然会出现权限错误,我什至不确定它是 bash 还是 nodejs。我最终设法找到了解决方法,但这意味着直接放弃在端口 80 上运行的节点,它似乎不想工作。
猜你喜欢
  • 2015-08-18
  • 2014-02-27
  • 2013-05-29
  • 2016-08-05
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
相关资源
最近更新 更多