我正在编写一个脚本,该脚本(基本上)从raspi gpio引脚控制某些电动机。我已经做了一段时间了,当我启动pi并手动运行程序时,它就可以正常工作。我也有一部分代码,使我可以使用手机通过蓝牙连接并发送一些数据来控制电动机。手动运行该程序也可以正常工作。
现在,我正在尝试使程序在启动时自动启动,因为它最终将进入较大的计算机(船)中,并且我不会将监视器挂在上面。我目前正在通过带有@reboot标记的cron作业来执行此操作。看起来像这样:
#This enables GPIO (as far as I know). The program fails without this command being run first.
@reboot sudo pigpiod
#This runs the python program. ampersand forks the process because it should run continuously.
@reboot python3 /home/pi/Desktop/BoatBrain.py &
#and this lets me connect my phone over bluetooth. The python program has
#a portion takes data from that connection. ampersand forks the process, which
#seems like the right thing to do, since it looks like it blocks other things.
#That is also why it is at the end of the cron table.
@reboot sudo rfcomm watch hci0 &
当我重新启动时,所有作业都可以运行,并且我可以连接手机,因此它一定已经通过了执行python脚本的线路,但是伺服系统我只是无法控制地连接了抖动。让我重申一下,当我离开cronjobs并手动运行此程序时,该程序可以正常工作,几乎没有抖动,因此不会感觉像是电气问题...
如果您需要更多信息,请告诉我,我们将很乐意提供。我倾向于在不了解XD的情况下忽略一切
谢谢!
答案 0 :(得分:0)
您是否向~/.profile
添加了任何内容?这可能就是为什么您自己调用命令时它起作用的原因。如果是这样,请在sudo vi /etc/profile.d/servo.sh
中创建与添加到~/.profile
的几行相同的文件。然后,系统将重新启动系统。
此外,您可以将所有三个命令放在一个shell脚本中,然后将脚本放在crontab中。然后脚本可以控制它们按顺序启动。您也可以让cronjob将输出写入日志文件,然后查看其内容。您还可以通过查看/var/log/syslog
哦,同样是为了进行测试,您可以将@reboot更改为10 * * * *
之类的开始时间,然后可以使cron正常工作而不必重新启动。然后,将其更改回@reboot以尝试重新启动。
您的登录名(.profile)丢失了一些,命令同时启动太快,需要以受控顺序启动,或者系统尚未完全准备就绪,但是我对此表示怀疑。