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

22

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

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

Эти устройства оказываются в неловких местах без доступа к Интернету, поэтому взять с собой монитор, клавиатуру и мышь для их запуска не совсем просто. Есть ли способ настроить их на автоматический вход в систему, запустить программу 1, а затем автоматически запустить программу 2 при запуске?

Kersakov
источник

Ответы:

15

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

Xer0FyT
источник
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;перед запуском ваших программ.
Тор Клингберг
+ goldilocks Проблема в том, что вы не можете получить доступ к записи rc.localбез предварительного запуска sudo. Что ты посоветуешь?
Ринсвинд
15

Ответ от Xer0FyT, вероятно, является самым простым способом автоматического запуска программы на PI. Но проблемы возникают после сбоя запущенной программы по любой причине, потому что она не будет перезапущена, так как отсутствует мониторинг процесса. Я лично рекомендовал бы вместо этого использовать daemontools . Это довольно просто настроить (и входит в Raspbian). По сути, вы создаете каталог службы, который содержит runсценарий оболочки, запускающий вашу программу. Затем daemontools позаботится о том, чтобы ваша программа запускалась и перезапускалась в случае сбоя по любой причине.

Настройка daemontools довольно проста. Только что

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

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

dividuum
источник
9
  1. В Raspian нажмите Меню, Настройки, Редактор главного меню.
  2. Нажмите Настройки и выберите Приложения по умолчанию для LXSession.
  3. Нажмите OK и закройте редактор главного меню
  4. Теперь нажмите «Меню» и в разделе «Настройки» выберите «Приложения по умолчанию для LXSession».
  5. Откроется конфигурация LXSession
  6. Нажмите Автозапуск
  7. Под Ручной автозапуска приложений вставьте в вашей командной строке Java
  8. нажмите добавить
  9. закройте приложение конфигурации LXSession и перезагрузите ваш пи

    Ваше приложение Java должно работать после перезагрузки

Palmeta
источник
Я думаю, что здесь требуется чуть больше деталей
Дарт Вейдер
Работал нормально для меня!
Jbyrnes
Спасибо @Palmeta! У меня была одна программа в автозапуске, но я действительно забыл, где я ее установил. Я посмотрел везде. С помощью инструмента конфигурации, который вы описали, я наконец смог найти его снова и деактивировать: D! 100 очков
Паскаль Ламерс
2

Возможно, вы уже cronустановили некоторые из служебных задач PI.

Поиск man 5 crontabпо @reboot.


источник
0

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

Беги man service.

Вот руководство по созданию сценариев инициализации: http://www.novell.com/coolsolutions/feature/15380.html

Бекс
источник
2
К сожалению, из-за стремительного леммингового подхода к systemdбольшинству дистрибутивов Linux, включая Raspbian, этот ответ потребует обновления, если OP обновит свою систему так, чтобы он перенял sysV init... 8- (
SlySven
0

Просто перейдите по этой ссылке .

Предполагая, что у вас есть test.txt на рабочем столе, пример может быть:

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

и это работает!

Эхсан Ансари
источник