Запуск програми 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.