Перейти к содержанию
    

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

Добрый день,

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

 

Есть 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 или оно не готово? Какие сервисы за него отвечают?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам нужно добавить 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 или как хотите еще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/7/2021 at 2:37 AM, AltairNsk said:

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


cd /root/scripts

python3 /root/scripts/start_actors.py &

exit 0

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/7/2021 at 10:37 AM, AltairNsk said:

Добрый день,

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

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

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

Добрый день!

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не ошибаюсь, в Линукс есть утилита cron, с помощью которой можно запускать задачи периодически со всякими разными условиями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...