[英]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.