运行 配置蓝牙后的脚本 运行 - Raspberry Pi 3

Run a script after Bluetooth is configured and running - Rasperry Pi 3

我正在尝试在启动时自动调用一个使用蓝牙的程序。但是,在配置蓝牙和 运行ning 之前调用该程序。

我试过用两种方式调用程序:

  1. 使用 init.d 中的脚本并在 update-rc.d 中注册,并在初始化中使用此行:# Required-Start: $all
  2. 从 /etc/rc.local
  3. 调用它

这些都没有达到预期效果。他们都启动程序,但在配置蓝牙和 运行ning 之前。

在蓝牙之后强制脚本或程序 运行 的最佳方法是什么?

下面是引导序列中的一些 select 行,因此您可以看到我遇到的问题:

[ OK ] Started Login Service.
[ OK ] Started Getty on tty1.
**Where my program is currently executing**
[ OK ] Started Configure Bluetooth Modems connected by UART.
[ OK ] Reached Target Bluetooth
**Where I want my program to be executing**

Raspbian GNU/Linux 8 tty1
login:

使用 crontab,我能够使用以下行使其工作:

@reboot sleep 5 && node /home/pi/workspace/my_program

不理想,但目前可以使用。我愿意接受任何更好的答案。

Debian 8 "Jessie" 的新初始化系统是 systemd。 Debian 7 "Wheezy" 中的旧方法是具有 运行 级别和 /etc/inittab 的 Sysv。使用 crontab 到 运行 你的程序的一个缺点是,如果脚本执行崩溃,它将永远死掉。如果脚本结束时调用 "respawn".

,则自动重新启动脚本

如您所见,蓝牙服务正在 运行ning 并打印已到达 "Target"。要创建您自己的服务,蓝牙启动后 运行s,并使用 systemd 重生,只需在 /etc/systemd/system/ 中创建一个文件,即 my_program.service

[Unit]
Desription=my_program with systemd, respawn, after bluetooth
After=bluetooth.target

[Service]
ExecStart=node /home/pi/workspace/my_program
Restart=always

[Install]
WantedBy=multi-user.target

并激活它

systemctl enable my_program.service

重启或手动启动

systemctl daemon-reload
systemctl start my_program.service

如果终止进程或重新启动,my_program 将在几秒后自动重新启动。

对于任何人 运行 Raspbian 9(伸展)

我尝试了@andpei 的回答,但我的应用程序仍然没有等待蓝牙启动。我能够通过添加 "Requires".

来解决这个问题
[Unit]
Desription=my_program with systemd, respawn, after bluetooth
After=bluetooth.target
Requires=bluetooth.target