如何通过/etc/rc.local运行我的node.js应用程序?

时间:2019-08-29 11:40:53

标签: javascript node.js raspberry-pi

我想从树莓派运行一个节点应用程序。该应用程序应该在启动时启动。

我在/etc/rc.local中包含了以下几行(在出口0之前):

    cd /home/pi/PPBot
    node bot.js > dev/null &

我首先导航到正确的文件夹,然后从那里运行机器人。但是,当我重新启动树莓派时,节点应用程序未运行。因此,似乎rc.local没有执行或无法执行我提供的行。

我正在寻找一种解决方案,以便该应用程序可以在启动时运行。

2 个答案:

答案 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(显示消息)查看引导日志。