我想从树莓派运行一个节点应用程序。该应用程序应该在启动时启动。
我在/etc/rc.local中包含了以下几行(在出口0之前):
cd /home/pi/PPBot
node bot.js > dev/null &
我首先导航到正确的文件夹,然后从那里运行机器人。但是,当我重新启动树莓派时,节点应用程序未运行。因此,似乎rc.local没有执行或无法执行我提供的行。
我正在寻找一种解决方案,以便该应用程序可以在启动时运行。
答案 0 :(得分:0)
保存此
[Unit]
Description=Node JS Script Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node /path/to/hello_env.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
以nodescript.service
到/ etc / systemd / system /
sudo systemctl daemon-reload
sudo systemctl start nodescript
如果可行,请在启动时启动
sudo systemctl enable nodescript
答案 1 :(得分:0)
我使用的示例(例如this one)
cd /home/pi/PPBot
node bot.js < dev/null &
代替
cd /home/pi/PPBot
node bot.js > dev/null &
请注意,<
而不是>
。如您所见here,<
重定向标准输入(stdin),而>
重定向标准输出(stdout)。如here所述,
< /dev/null
用于立即将EOF发送到程序,以便它不等待输入(/dev/null
是空设备,是一个特殊文件,会丢弃所有写入其中的数据,但报告写操作成功,并且不向从其读取的任何进程提供数据,从而立即产生EOF)。&
是一种特殊的命令分隔符,用于后台执行前面的进程。
由于您尚未使用< dev/null
,因此您的程序可能被卡住并等待一些输入。最后的&
使您的程序在后台运行。尝试不包括它,看看您的Rasberry Pi是否仍在启动。如果不是这样,您就知道您的程序可以连续运行并阻止进一步启动。当您使用&
符号时,您的程序只是在一个单独的过程中失败了。在这种情况下,将>
更改为<
应该会有所帮助,因为您的程序无需等待输入。
如果上述方法无效,请使用特定的错误消息更新您的问题。您可以使用命令dmesg
(显示消息)查看引导日志。