配置并运行蓝牙后运行脚本 - Rasperry Pi 3

时间:2016-06-16 21:12:33

标签: bluetooth raspberry-pi raspbian raspberry-pi3

我尝试在启动时使用蓝牙自动调用程序。但是,在配置并运行蓝牙之前,将调用该程序。

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

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

    这些都不能按预期工作。它们都启动程序,但在配置并运行蓝牙之前。

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

    以下是引导顺序中的一些选择行,以便您可以看到我遇到的问题:

    [ 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:
    

3 个答案:

答案 0 :(得分:6)

Debian 8" Jessie"的新init系统是系统化的。 Debian 7" Wheezy"是运行级别和/etc/inittab的Sysv。使用crontab运行程序的一个缺点是,如果脚本执行崩溃,它将永远消亡。如果脚本的结束被调用,则会自动重新启动脚本" respawn"。

正如您所看到的,蓝牙服务正在运行并打印出一个"目标"到达了。要创建自己的服务,在蓝牙启动后运行,并使用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

答案 1 :(得分:0)

使用crontab,我能够使用以下行:

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

不理想,但现在有效。我可以接受任何更好的答案。

答案 2 :(得分:0)

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

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

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