Запуск програми Raspberry Pi автоматично при запуску


22

Я побудував бездротову сенсорну мережу, що складається з двох Raspberry Pi (runnnig Raspbian) із включеними датчиками та базової станції Raspberry Pi, яка збирає дані.

Кожен раз, коли я хочу запустити систему, я повинен увійти до кожного сенсорного блоку і запустити дві петлі програми Python, одну для збору даних сенсора та одну для передачі на базову станцію.

Ці підрозділи збираються в незручних місцях, де немає доступу до Інтернету, тому взяти монітор, клавіатуру та мишу для мене не просто. Чи є спосіб, щоб я налаштував їх автоматично входити в систему, запускати програму 1, а потім автоматично запускати програму 2 при запуску?

Відповіді:


15

Ви можете додати ці 2 програми до файлу rc.local. Це запустить їх при запуску. Більше інформації можна знайти на веб- сайті http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .


3
Справа не в тому документі, який, здається, відвертає людей: Не використовуйте sudoв rc.localсобі. Він запускається з привілеями root під час завантаження. Не забудьте звернути увагу на частину використання, &якщо ваша програма просто щось не зробить, а потім вийде.
— золотинки

Якщо ви хочете, щоб ваші програми запускалися після того, як мережа налаштована, /path/to/somescript.sh &до rc.localта в сценарій додайте while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;перед запуском програми.
— Tor Klingberg

+ goldilocks Проблеми полягають у тому, що ви не можете отримати доступ до запису rc.localбез попереднього запуску судо. Що ти пропонуєш?
— Rincewind

15

Відповідь Xer0FyT - це, мабуть, найпростіший спосіб автоматичного запуску програми на PI. Але проблеми виникають, коли запущена програма збивається з будь-якої причини, оскільки вона не буде перезапущена, оскільки немає моніторингу процесів. Я особисто рекомендував би замість цього використовувати daemontools . Це досить просто в налаштуванні (і входить до програми Raspbian). В основному ви створюєте службовий каталог, який містить runсценарій оболонки, який запускає вашу програму. Далі dantontools переконається, що програма запущена та перезапущена, якщо вона збивається з будь-якої причини.

Встановити демомонтоли досить просто. Просто

apt-get install daemontools daemontools-run

Потім створіть службу каталогу, що містить виконуваний сценарій запуску:

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

Погляньте /service/my-service/runта відредагуйте його, щоб він запустив власну програму замість запуску echo. Як тільки це буде зроблено, символізуйте цей каталог у /etc/serviceтак, щоб daemontools автоматично (пере) запускав його:

cd /etc/service
ln -s /service/my-service .

Приблизно через 5 секунд ваша програма повинна запуститися. Ви можете запустити / зупинити його за допомогою

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

Можна також увійти в (наприклад) syslog. Таким чином, результат вашої програми не втрачається. Я написав більш повну публікацію про це тут: https://info-beamer.com/blog/running-info-beamer-in-production


9
  1. У програмі Raspian натисніть Меню, Налаштування, Редактор головного меню
  2. Клацніть Налаштування та перевірте програми за замовчуванням на LXSession
  3. Клацніть OK і закрийте редактор головного меню
  4. Тепер натисніть Меню та в розділі Налаштування натисніть на програми за замовчуванням для LXSession
  5. Відкриється конфігурація LXSession
  6. Клацніть Автозапуск
  7. У розділі "Ручне автоматичне запуску" програми вставити в командному рядку java
  8. натисніть кнопку Додати
  9. закрийте програму конфігурації LXSession та перезавантажте файл pi

    ваш додаток Java має працювати після перезавантаження


Думаю, тут потрібно лише трохи детальніше
— Дарт Вейдер

Добре працював для мене!
— jbyrnes

Дякую @Palmeta! У мене була одна програма автозапуску, але фактично забула, де я її встановила. Я дивився скрізь. З описаним вами інструментом конфігурації я нарешті міг знайти його знову і відключити: D! 100 балів
— Паскаль Ламерс

2

Напевно, ви вже cronвстановили для деяких завдань по догляду за ПІ.

Пошук man 5 crontabпо @reboot.


0

Можливо, ви захочете дослідити service. Ви можете створити сценарій init, який є частиною init системи, і розмістити його на відповідному рівні запуску.

Біжи man service.

Ось посібник зі створення сценаріїв init: http://www.novell.com/coolsolutions/feature/15380.html


2
На жаль, з systemdнаближенням лемінгів до більшості дистрибутивів Linux, включаючи Raspbian, ця відповідь потребує оновлення, якщо ОП оновить їх систему так, щоб перейняти систему sysV init... 8- (
— SlySven

0

Просто перейдіть за цим посиланням .

Якщо припустити, що ви маєте test.txt на робочому столі, прикладом може бути:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@leafpad /home/pi/Desktop/test.txt

і це працює!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.