rc.local 中调用的脚本仅运行第二个命令,而不是第一个命令

rc.local 中调用的脚本仅运行第二个命令,而不是第一个命令

我正在运行带有 Fadecandy 的 Raspberry Pi 来控制 LED。我已完成所有设置,我只想让 Fadecandy 服务器和我导出的处理草图在启动时运行。

在 rc.local 中,我调用一个名为startup.sh的脚本,其中包含以下内容:

#! /bin/sh

/home/pi/sketchbook/leds/loading/application.linux64/loading &
/usr/local/bin/fcserver &

第二行(fcserver)正在运行,服务器启动正常。第一行(应用程序)似乎根本没有运行。

但是,如果我从终端调用该脚本(或 rc.local),则两行都会运行并且应用程序会启动。

我知道如果出现错误,rc.local 将退出,但这似乎不是问题第二在第一行没有运行之后,该行正在运行。

我究竟做错了什么?任何帮助将非常感激

答案1

我的猜测是 fcserver 运行守护进程 - 即分叉并与正在运行的 shell 解除关联,而您的加载程序则不会。

当你的脚本由 init 运行时会发生什么,它会生成一个新的 shell(在你的情况下为 /bin/sh ),在该 shell 的后台运行 load 和 fcserver,...然后销毁该 shell,这隐式地向所有子进程发送 HUP。 Fcserver 之所以能幸存下来,是因为它是守护进程,而加载则不然。

您可以尝试在加载调用前添加前缀nohup

#! /bin/sh

nohup /home/pi/sketchbook/leds/loading/application.linux64/loading &
/usr/local/bin/fcserver &

我不确定 nohup 是否在您的 Raspberry Pi 上可用 - 我没有要检查的。

相关内容