Как получить автозапуск скрипта gpio на питоне?

Тема в разделе "Raspberry Pi", создана пользователем !@#$, 17 фев 2020.

  1. !@#$

    !@#$ Нерд

    Здравствуйте, добрые люди.
    Третью неделю развлекаюсь с Z. Написал Питоном учебный скрипт. Светодиоды моргают как и задумано. Поместил на рабочий стол. Двойным кликом запускается. А вот как сделать автозапуск ... не могу осилить. Подобная тема на этом форуме ясности не внесла. В связи с чем два вопроса:
    куда переместить мой скрипт с рабочего стола?
    как организовать этот автозапуск?
    Подробно не нужно ... только направление подскажите. Пожалуйста
     
  2. NikitOS

    NikitOS Король шутов Администратор

  3. !@#$

    !@#$ Нерд

    Спасибо, что не ответили командой в терминале. В Вашей ссылке также не оказалось прямого ответа ... а только направление. Перерыл разных теорий и практик. Много полезного нашёл. Решение оказалось очень простым. В ОДНУ! строчку в терминале ... и мой скрипт подхватывается при перезагрузке малинки прямо с рабочего стола, одновременно запуская python3. А останавливается простым переименовыванием файла на том же столе. Пока меня это устраивает.
    в файле /etc/rc.local редактором nano добавил строчку sudo python3 /home/pi/Desktop/Zmejka.py
     
  4. Igor68

    Igor68 Гуру

    1) Сделайте файл питона запускаемым (права доступа)
    2) отредактируйте этот файл в самое начало кода(первые строки) добавьте:
    Код (Python):
    #!/usr/bin/python
    # coding: utf-8
    первая строка указывает на путь запуска (и не обязательно питон если это другой код - не питон ) - вам надо указать свой питон.
    вторая строка это что бы это питон не ругался на кирилицу (даже если это комментарий)
    Ну и sudo если требуется запустить от имени root. И если надо не root а другой пользователь (возможно надо останавливать, редактировать и перезапускать код а не всю малину) то:
    Код (Bash):

    su <имя пользователя> -c <путь к запускаемому файлу>
     
     
  5. !@#$

    !@#$ Нерд

    Попробовал автозагрузку по другому способу ... попозже, так сказать. В файле /home/pi/.bashrc добавил редактором nano пару строчек
    echo Running at boot
    sudo python /home/pi/Desktop/Zmejka.py
    Скетч стал запускаться позже, останавливается клавишами Ctrl+C. Но вылезли и побочные эффекты: при вызове терминала ... в нём бегут строки пока не остановлю скетч. И сам терминал тупит ужасно ... с третьего разу только можно двигаться по дереву командой cd. При первом способе такого не наблюдалось. И ... я наверное не совсем внятно объяснил вопрос ... на данном этапе мне нужно было только автозапуск голого скетча светодиодами поморгать.
    А вставлять скрипты на Питоне в сайт PHP, и организовывать их выполнение POST, GET запросами или с CGI, например, сейчас и учусь.
     
  6. Igor68

    Igor68 Гуру

    Вообще-то в той сессии где автозапуск скрипта никто ничего не делает, а пользуются другой сессией (ssh).
     
  7. Как это понимать?
    ssh - всего лишь способ открыт клиентскую сессию, точно так-же клиентская сессия открывается через tty консоль, когда пользователь подключается через последовательный порт и вводит логин/пароль.
    В начале клиентской сессии выполняется ~/.bashrc, сколько раз будем начинать сессию, столько же раз будет выполняться bashrc.
    Начали 2-3 сессии по ssh для одного и того же пользователя, столько же раз выполнится bashrc.
    Для случая с рабочим столом, точно также, сколько раз мы будем заходить/выходить в систему определенным пользователем, столько же и будет выполняться bashrc.
    Если ТС в bashrc добавил скрипт, который выполняется бесконечно и поджирает ресурсы, то на десктопе видим дикие тормоза.
    Если скрипт что-либо выводит в стандартный поток вывода или стандартный поток ошибок, и пользователь не направил этот вывод в файл или "черную дыру", то подключившись по ssh весь этот вывод пользователь наблюдает.
    Вообще немного странное решение, запускать бесконечный скрипт в bashrc, для чего это нужно?
    Чтоб при открытии сессии мигали светодиоды, а когда сессиия завершится, спустя таймаут система прибьет запущенные процессы в этой сессии и мигание прекратиться?
     
    parovoZZ нравится это.
  8. !@#$

    !@#$ Нерд

    Не мог же я за две недели разобраться в тонкостях архитектуры! ... А что то делать не видя результатов - это скучно.
    Оставил автозапуск скрипта в etc/rc.local.
    В настоящий момент у меня на кухне ESP8266 меряет влажность воздуха, температуру и загазованность. Вентилятор вытяжки включает сама. Если не справляется и параметр растёт ... тогда отправляет по WI-FI на Raspberry-Z сообщение, что параметр подходит к аварийному значению. Малинка в другой комнате зажигает определённые светодиоды. Это моя первая элементарная ячейка на пути к умному дому. Вот разберусь про Телеграмм-бот или сообщения на почту - и будет у меня в мобильнике сообщение об аварийном параметре. Потом буду вширь расти. А включение света "Алиса включи свет!!!" - это не умный дом, а дистанционное управление.
     
  9. Иногда запущенные приложения сдуваются, из за ошибок в коде или просто кто нибудь случайно прибьет его.
    Если запустили приложение из rc.local и оно случайно упало, кто его запускать будет? Если это не критично, то и ладно, что там на эти аварийные значения любоваться.
    Если приложение должно работать постоянно и в случае внезапного падения его обязательно нужно запустит снова, то проще не запускать его из rc.local, а воспользоваться стандартными средствами, предназначенными для запуска служб - systemd.
    Для Вашей службы можете определить параметр Restart и RestartSec и менеджер системы и служб запустит приложение, если оно неожиданно упадет.
     
  10. !@#$

    !@#$ Нерд

    В тестовом режиме Малинка работает с моим скриптом уже четверо суток. За всё время было только два сбоя. Но это не автозапуск виноват ... при перезагрузке роутера или временном отлипании WIFI, при работающем Raspberry, не происходит автоматического подключения. Тогда и скрипт не работает. Перезагрузка всё исправляет. Наверное, в настройках можно установить автоматическое подключение к локальной сети.
     
  11. Igor68

    Igor68 Гуру

    Именно сессия... и именно другая сессия, но от того же пользователя. Вы хотите сказать что нельзя остановить процесс запущеный в другой сессии от этого же пользователя? Зачем так говорить? И кто сказал что ~/bashrc не будет запускаться для каждой сессии? И почему в ~/bashrc не должно проверяться наличие уже запущенного процесса в другой сессии? Как пример запуск двух экземпляров сервера на один и тот же порт прослушивания не выйдет. А вот отладку кода... вдруг надо поправить поможет как раз запуск от обычного пользователя, но можно и от root (но мне лично удобнее применять пользователя)
     
  12. Я именно это и сказал, когда в одной сессии запустился bashrc и пользователь решил сделать его бесконечным, то в другой сессии (как Вы говорите в #6) тоже тоже будет выполняться тот-же bashrc.
    Вот я и удивился, как в другой сессии автозапуск ничего не делает.
    А вдруг выйдет :)
    Что касается tcp, то есть такая опция SO_REUSEPORT, при работе с tcp это позволяет нескольким сокетам прослушивания, обычно каждый в отдельном потоке, быть привязанным к одному и тому же порту.
    Как пример использования сокетов в nginx, в конфигурации указываем сколько worker-ов будет и nginx строит для порта прослушивания несколько потоков с сокетами привязанными к одному порту.
     
  13. Igor68

    Igor68 Гуру

    Ну тогда два веб сервера типа apache можно поднять с портом 80:), тьфу ты пардон эти номера типа 80 и 443 простому пользователю нельзя.:eek:
     
  14. Igor68

    Igor68 Гуру

    И долго о пустом базарить?