Jump to content

    
Sign in to follow this  
AltairNsk

Автозапуск Python-приложения под Armbian на OrangePi

Recommended Posts

Добрый день,

свалилась на голову задачка:

 

Есть OrangePi c Аrmbian'ом.

Юзеркод на питоне:

забирает кусками бинарный поток из usb-cdc,

парсит данные,

отправляет по wifi на kafka сервер,

бинарник параллельно складывает в локальный файл.

Реализация – модель акторов силами pykka библиотеки.

Нужен автостарт и далее непрерывная работа в фоне.

 

Задача осложняется тем, что и линукс, и питон я впервые вижу, третий день гляжу, как баран на новые ворота (и, возможно, не на те ворота).

 

Как я понял:

Cтартует python процесс, внутри несколько тредов с асинхронным обменом. При этом должны быть розданы права на доступ к оборудованию, сети, файловой системе. И вся балалайка должна быть запущена не ранее, чем оборудование/сеть/и т.д. поднимется...

 

Сейчас: запуск через rc.local

cd /root/scripts

python3 /root/scripts/start_actors.py &

exit 0

(ну да, всё незатейливо под рутом)

(и заодно понял, зачем первая строчка – в скрипте файл создается относительно рабочей директории)

 

Результат: автостарт – через раз, но если запустилось – работает, в смысле вижу данные на сервере.

Если не запустилось и перезапустить руками rc.local

systemctl restart rc.local

То заводится и работает.

 

Как я понял, в данном случае rc.local – это один из сервисов systemd. Для сервисов можно назначать зависимости (=>порядок запуска). Сервисы запускаются по возможности параллельно. В какую очередь дело доходит до rc.local, я не знаю. Иногда все готово для работы python скрипта, иногда нет.

 

"Окей гугл: How To Autorun A Python Script On Boot Using systemd"

"Да всё просто: пиши свой юнит"

 

[Unit]

Description=MyService

Wants=network-online.target

After=network-online.target multi-user.target

 

[Service]

Type=simple

ExecStart=/usr/bin/var DEV=1 /usr/bin/python3 /root/scripts/start_actors.py

WorkingDirectory=/root/scripts

User=root

StandardOutput=file:/root/scripts/script.log

StandardError=file:/root/scripts/error.log

 

[Install]

WantedBy=multi-user.target

 

Необходимые зависимости – один большой вопрос...

Пока я вижу, что модуль стартует. Но данных нет. Нет доступа к USB или оно не готово? Какие сервисы за него отвечают?

Назначение вывода – а так можно? Вроде бы да, питон-скрипт свой лог сюда кладет...

Share this post


Link to post
Share on other sites

Вам нужно добавить udev правило, чтобы обрабатывать событие подключения и определения usb-cdc системой:
https://unix.stackexchange.com/questions/436666/run-service-after-ttyusb0-becomes-available
Удалите из вашего сервиса systemd WantedBy= и добавьте правило udev с SYSTEMD_WANTS вашего сервиса для usb-cdc по VID/PID, серийному номеру, появлению ttyUSB0 или как хотите еще.

Share this post


Link to post
Share on other sites
On 11/7/2021 at 2:37 AM, AltairNsk said:

Сейчас: запуск через rc.local


cd /root/scripts

python3 /root/scripts/start_actors.py &

exit 0

 

Надежнее в таких скриптах указывать полный путь.
не python3, а весь путь к нему.

Я бы сделал ваше приложение в виде автомата с двумя состояниями: инициализация и работа.
В начальном состоянии делать тест, что все поднялось и если нет, то поспать мунуту, а потом снова. Когда все поднялось, то перейти в состояние работа.

 

Share this post


Link to post
Share on other sites
On 11/7/2021 at 10:37 AM, AltairNsk said:

Добрый день,

свалилась на голову задачка:

Есть OrangePi c Аrmbian'ом.

Юзеркод на питоне

Добрый день!

Если не секрет - удалось ли решить задачку с автозапуском скрипта на питоне?

Как в итоге сделали?

Share this post


Link to post
Share on other sites

В скрипте, который заускается на линуксе, первой строчкой указывается чем этот скрипт обрабатывается.
Надо указать питон вместе с путем к питону.

В скрипте запуска надо будет указывать просто скрипт и путь к нему.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this