javascript - 如何在 Raspberry Pi 上从 Node.js 应用程序执行关机命令

标签 javascript linux node.js raspberry-pi

我有一个运行简单 NodeJS 应用程序的 headless Raspberry Pi。

我连接到 Pi 的唯一接口(interface)是一个按钮,可以启动和停止延时视频录制。

我知道在没有正确关机的情况下切断 Pi 的电源不是好的做法,所以我想向 Node 添加一个关机命令。

使用 ShellJS,我可以非常简单地做到这一点 - 如果用户按住按钮五秒钟,我可以调用

shell.exec('sudo shutdown -h now');

这将关闭 Pi。当我通过 ssh 连接到 Pi 并且我自己调用 Node 命令('node app.js')时,这按预期工作。但我的目标是让我的 Node 应用程序在启动时自动运行。我通过使用“/etc/rc.local”在启动时调用脚本来做到这一点:

su pi -c 'node /path/to/app.js'

在这种情况下,关闭命令不起作用,我什至不知道如何访问 Node 控制台以查看它抛出的错误类型。有人可以在这里为我指明正确的方向吗?

最佳答案

当您从 /etc/rc.local 启动进程时,这些进程将使用有限的 $PATH 变量($PATH 变量包含可在其中查找可执行程序的目录列表,因此您不必使用它们的完整路径来启动这些程序;相反,只需它们的名称就足够了。

这通常不包含系统二进制文件的路径,例如 shutdown,可以在 /sbin 中找到。

您的登录 shell 很可能会将这些系统路径添加到 $PATH,这就是为什么从命令行启动 Node 应用程序时,关闭可执行文件工作正常。

但是当从/etc/rc.local 启动同一个Node 应用程序时,在$PATH 的任何目录中都找不到关闭的可执行文件,并尝试执行它会导致错误。

您可以通过使用关闭可执行文件的完整路径或在 /etc/rc.local 中扩充 $PATH 变量来解决此问题:

# /etc/rc.local
export PATH=/sbin:/usr/sbin:$PATH
su pi -c 'node /path/to/app.js'

关于javascript - 如何在 Raspberry Pi 上从 Node.js 应用程序执行关机命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110649/

相关文章:

html - 如何在 node.JS 中使用 phantomJs 将 html 内容呈现为 pdf 文件

node.js - 如何从 cookie jar 中记录 cookie?

TGP deentityify 方法中引入的 Javascript 模块模式 - 为什么需要此模式?

javascript - 如何使用 AngularJS 和 RequireJS 从外部文件注入(inject)服务?

从管道 bash 脚本运行时,Python 脚本不等待用户输入

linux - Apache 服务器上的 403 错误

linux - 在 Linux 中如何查找文件名以 zi 开头且长度恰好为 8 个字符

javascript - 按钮需要点击两次才能触发功能

javascript - Extjs 同步商店给我一个 url is undefined error under specific conditions

node.js - 在 Mocha 上测试管理员用户