Pub*_*ust 1 javascript linux node.js raspberry-pi
我有一个无头的Raspberry Pi运行一个简单的NodeJS应用程序.
我附加到Pi的唯一界面是一个按钮,用于启动和停止间隔拍摄视频录制.
我知道在没有正确关闭的情况下切断Pi的电源并不好,所以我想向Node添加一个shutdown命令.
使用ShellJS,我可以非常简单地做到这一点 - 如果用户按住按钮五秒钟,我可以打电话
shell.exec('sudo shutdown -h now');
Run Code Online (Sandbox Code Playgroud)
这将关闭Pi.当我通过ssh连接到Pi并且我自己调用node命令('node app.js')时,这可以正常工作.但我的目标是让我的Node应用程序在启动时自动运行.我是通过使用'/etc/rc.local'在启动时调用脚本来做到的:
su pi -c 'node /path/to/app.js'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,shutdown命令不起作用,我甚至不知道如何访问节点控制台以查看它抛出的错误类型.有人能指出我在正确的方向吗?
当您启动进程时/etc/rc.local,这些进程将使用有限的$PATH变量启动(该$PATH变量包含可在其中查找可执行程序的目录列表,因此您不必使用其完整路径启动这些程序;相反,只需要它们的名称即可满足).
这通常不包含系统二进制文件的路径,例如shutdown,可以在其中找到/sbin.
您的登录shell很可能会添加这些系统路径$PATH,这就是为什么 - 从命令行启动您的Node应用程序时 - 关闭可执行文件正常工作.
但是当启动相同的Node应用程序时/etc/rc.local,无法在任何目录中找到关闭可执行文件$PATH,并且尝试执行它将导致错误.
您可以通过使用关闭可执行文件的完整路径或通过$PATH在/etc/rc.local以下位置扩充变量来解决此问题:
# /etc/rc.local
export PATH=/sbin:/usr/sbin:$PATH
su pi -c 'node /path/to/app.js'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |