运行 配置蓝牙后的脚本 运行 - Raspberry Pi 3
Run a script after Bluetooth is configured and running - Rasperry Pi 3
我正在尝试在启动时自动调用一个使用蓝牙的程序。但是,在配置蓝牙和 运行ning 之前调用该程序。
我试过用两种方式调用程序:
- 使用 init.d 中的脚本并在 update-rc.d 中注册,并在初始化中使用此行:
# Required-Start: $all
- 从 /etc/rc.local
调用它
这些都没有达到预期效果。他们都启动程序,但在配置蓝牙和 运行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
我正在尝试在启动时自动调用一个使用蓝牙的程序。但是,在配置蓝牙和 运行ning 之前调用该程序。
我试过用两种方式调用程序:
- 使用 init.d 中的脚本并在 update-rc.d 中注册,并在初始化中使用此行:
# Required-Start: $all
- 从 /etc/rc.local 调用它
这些都没有达到预期效果。他们都启动程序,但在配置蓝牙和 运行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