繁体   English   中英

如何从Raspberry Pi上的Node.js应用执行关机命令

[英]How to execute shutdown command from Node.js app on Raspberry Pi

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

我连接到Pi的唯一接口是一个按钮,该按钮可以启动和停止定时录像。

我知道在没有适当关闭的情况下切断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'

在这种情况下,shutdown命令不起作用,我什至不知道如何访问节点控制台以查看其引发的错误类型。 有人可以在这里指出正确的方向吗?

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

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

您的登录Shell最有可能确实将这些系统路径添加到$PATH ,这就是为什么从命令行启动Node应用程序时,shutdown可执行文件可以正常工作的原因。

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

您可以通过使用shutdown可执行文件的完整路径,或通过增加/etc/rc.local$PATH变量来解决此问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM