如何从Raspberry Pi上的Node.js应用程序执行关机命令
我有一个无头的Raspberry Pi运行一个简单的NodeJS应用程序。
我已经连接到Pi的唯一的接口是一个单一的button,启动和停止一个timelapsevideo录制。
我知道在没有正确closures的情况下切断Pi电源并不是一个好习惯,所以我想给Node节点添加一个closures命令。
使用ShellJS,我可以很简单地做到这一点 – 如果用户按住button五秒钟,我可以打电话
shell.exec('sudo shutdown -h now');
这将closuresPi。 当我通过ssh连接到Pi,并且我自己调用了节点命令('node app.js')时,它的工作方式和预期的一样。 但我的目标是让我的Node应用程序在启动时自动运行。 我正在通过使用'/etc/rc.local'来在启动时调用脚本:
su pi -c 'node /path/to/app.js'
在这种情况下,shutdown命令不起作用,我甚至不知道如何访问节点控制台来查看抛出的错误。 有人可以在这里指出我正确的方向吗?
当你从/etc/rc.local
启动进程时,这些进程将以一个有限的$PATH
variables启动( $PATH
variables包含一个查找可执行程序的目录列表,所以你不必使用这些程序来启动这些程序他们的完整path;相反,只是他们的名字就足够了)。
这通常不包含系统二进制文件的path,如shutdown
,可以在/sbin
find。
您的loginshell最有可能将这些系统path添加到$PATH
,这就是为什么当从命令行启动您的Node应用程序时,closures可执行文件工作得很好。
但是,当从/etc/rc.local
启动相同的Node应用程序时,无法在$PATH
中的任何目录中findclosures可执行文件,尝试执行它将导致错误。
您可以通过使用closures可执行文件的完整path来解决这个问题,也可以通过在/etc/rc.local
增加$PATH
variables来解决这个问题:
# /etc/rc.local export PATH=/sbin:/usr/sbin:$PATH su pi -c 'node /path/to/app.js'
- 要更新MongoDB文档中的单个字段,最好的方法是什么? 在feathersjs中更新或修补钩子
- 比较对象数组中的属性值
- 契约:在最终确定之前或之后,向经纪公司发布契约
- 如何判断是否安装了node.js
- Hapi.js,Bookshelf.js和一个真实世界的例子
- JavaScript for循环内的asynchronous函数
- Webpack vs webpack-dev-server vs webpack-dev-middleware vs webpack-hot-middleware vs等
- netlify:WebSocket连接失败:连接在收到握手响应之前closures
- MEAN堆栈和bootstrap / bower问题