Моя (рабочая) программа raspberry pi не работает правильно, когда я запускаю ее при загрузке - PullRequest
0 голосов
/ 22 марта 2020

Я пишу скрипт, который (в основном) управляет некоторыми моторами с распиновых штифтов. Некоторое время я делал это правильно, и когда я загружаю pi и запускаю программу вручную, она работает просто отлично. У меня также есть часть кода, которая позволяет мне использовать мой телефон для подключения через Bluetooth и отправлять некоторые данные для управления двигателями. Это также отлично работает при ручном запуске программы.

Теперь я пытаюсь заставить программу запускаться автоматически при загрузке, так как в конечном итоге это будет go на большей машине (лодке), и я не буду подключить монитор et c. к этому. В настоящее время я делаю это через работу cron с тегом @reboot. Выглядит примерно так:

#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

Спасибо!

1 Ответ

0 голосов
/ 22 марта 2020

Вы что-нибудь добавили к ~/.profile? Возможно, это работает, когда вы сами вызываете команды. Если это так, создайте файл в sudo vi /etc/profile.d/servo.sh с той же парой строк, которые вы добавили в ~/.profile. Затем система перезагрузит их.

Кроме того, вы можете поместить все три команды в один скрипт оболочки и просто поместить скрипт в crontab. тогда скрипт может контролировать, что они запускаются по порядку. Вы также можете записать вывод cronjob в файл журнала, а затем посмотреть, что он говорит. Также вы можете проверить, когда запускается cron, посмотрев в /var/log/syslog

О, также для тестирования вы можете изменить @reboot на время запуска, например 10 * * * *, и затем вы можете заставить работать cron без необходимости перезагрузка. Затем позже измените его на @reboot, чтобы попробовать его с перезагрузкой.

Либо чего-то не хватает, если ваш логин имеет (.profile), команды запускаются слишком быстро одновременно и должны запускаться в контролируемый заказ или система еще не полностью готова, но я сомневаюсь в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...