我尝试在启动时使用蓝牙自动调用程序。但是,在配置并运行蓝牙之前,将调用该程序。
我尝试过以两种方式调用该程序:
# Required-Start: $all
这些都不能按预期工作。它们都启动程序,但在配置并运行蓝牙之前。
强制脚本或程序在蓝牙后运行的最佳方法是什么?
以下是引导顺序中的一些选择行,以便您可以看到我遇到的问题:
[ 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:
答案 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