Выполнить скрипт при запуске
Я пытаюсь выполнить скрипт, когда загружается моя малина Pi. Я бы хотел, чтобы веб-браузер автоматически открывался.
Я попытался найти простое решение (например, сбросить мой скрипт в какой-то каталог «startup» или что-то подобное), но я не вижу ничего подобного.
Я просмотрел Upstart , но я изо всех сил пытаюсь понять, как это работает. Любые скрипты, которые я пробовал, не работали, когда я их тестировал.
12 ответов
Для запуска Midori при запуске просмотрите этот учебник . Для решений DIY читайте дальше.
Вы можете добавить исполняемую команду скрипта в конец .bashrc
, который будет запускать ваш скрипт каждый раз при входе в систему .
-
Убедитесь, что вы находитесь в папке
pi
:$ cd ~
-
Создайте файл и напишите сценарий для запуска в файле:
$ sudo nano superscript
-
Сохранить и выйти: Ctrl + X , Y , Введите
-
Откройте
.bashrc
для конфигурации:$ sudo nano .bashrc
-
Прокрутите вниз и добавьте строку:
./superscript
-
Сохранить и выйти: Ctrl + X , Y , Введите
Если вы ищете решение, которое работает при загрузке на консоль , посмотрите эта ссылка . Базовая версия:
-
Создайте файл для сценария запуска и напишите свой скрипт в файле:
$ sudo nano /etc/init.d/superscript
-
Сохранить и выйти: Ctrl + X , Y , Введите
-
Сделайте исполняемый файл сценария:
$ sudo chmod 755 /etc/init.d/superscript
-
Скрипт регистрации запускается при запуске:
$ sudo update-rc.d superscript defaults
Если вы хотите, чтобы сценарий запускался при загрузке в среду LXDE , вы можете взглянуть на это сообщение форума малины Pi :
-
Перейдите к
~/.config/lxsession/LXDE-pi
-
Откройте файл
autostart
в этой папке:$ sudo nano autostart
-
Добавить
@midori
в новую строку. Если вы хотите запустить что-то вроде скрипта python, поместите что-то вроде@python mypython.py
в новую строку. Запуск файла сценария будет@./superscript
, но по какой-то причине сценарий работает в бесконечном цикле (возможно, это остановит это). -
Сохранить и выйти: Ctrl + X , Y , Введите
-
Перезапустите свой малиновый Pi в среду LXDE.
То, как я видел большинство людей, делает это (смотрите на форумах Raspberry Pi), и я сделал успешную работу с помощью /etc/rc.local
.
Все, что вам нужно сделать, это поместить ./myscript
в текстовый файл rc.local. Если он находится в python, поставьте python myscript.py
.
Это буквально «простое решение» (например, удаление моего скрипта в каком-то «каталоге запуска» или что-то подобное) »- возможно, поиск на форумах, когда у вас возникают вопросы, это решение появилось на первых 4 результаты поиска в Google!
Добавьте его в crontab
Команда crontab запускает команды в определенное время.
Отредактируйте файл:
sudo crontab -e
Добавить строку в файл (здесь скрипт python):
@reboot python3 /home/pi/Desktop/exemple.py &
Я хочу бросить свои два цента, хотя это старый вопрос, но обычно просят сделать простую вещь - автозапуск. Я попробовал все предлагаемые решения во всех ответах на этот вопрос. Никто из них не работал на меня. Я использую Raspberry PI Model 2 с Raspbian.
Единственный способ получить мое приложение для автозапуска успешно - через скрипт следующим образом. Я говорю успешно, потому что мое приложение запускалось, как ожидалось, без каких-либо проблем, например, начиная с неправильного пути работы.
1.Создайте пустой файл с расширением .sh и назовите его как хотите.
2.Copy и Вставить следующее ТОЧНО, кроме изменения имени вашего приложения на имя скрипта, которое вы только что создали.
#! /bin/sh
### BEGIN INIT INFO
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
### END INIT INFO
#change /direct/path/to/your/application to the path your application is in.
cd /direct/path/to/your/application # example cd /home/pi/myprogram/
#change YourProgramExactName to Exact name of your program that you want to auto start
./YourProgramExactName
exit 0
-
Затем сохраните файл сценария в папке вашего приложения
-
Затем откройте папку
/home/pi/.config/autostart
. В вашем случае это может быть иначе. Просто откройте домашнюю папку и включите просмотр скрытых папок. откройте.config/autostart
. Если вы не видите папку автозапуска, создайте папку с именем autostart в папке .config. -
в папке автозапуска вам необходимо создать ярлык для вашего файла сценария, который вы создали, следующим образом. Создайте пустой файл с расширением
.desktop
. -
Скопируйте и вставьте следующее в пустой файл рабочего стола, за исключением того, что вам нужно будет изменить
Comment
,Name
,Exec
,Path
иIcon
.[Desktop Entry] Comment= Exec=/path/to/Your/application/Name-of-the-script-file (.sh) Icon=/Path/to/Your/application/Icon/IconName Name=YourApplicationEXACTNAME Path=/Path/to/Your/Application-ONLY Type=Application
-
Сохраните и закройте файл после изменения всех необходимых полей. Вы сделали. Просто проверьте это.
- note: это делает скрипт Debian LSBInit совместимым: https://wiki.debian.org/LSBInitScripts
У меня также были проблемы с этим. На Raspberry Pi3 работает Raspbian, это то, что я сделал:
- Создайте сценарий запуска в корневом каталоге (я назвал мой «запуск»):
sudo leafpad launch.sh
- Сохранить файл
- Отредактируйте файл автозапуска LXDE-pi
sudo leafpad /home/pi/.config/lxsession/LXDE-pi/autostart
- Добавьте это в нижнюю часть этого файла.
./launch.sh
- перезагрузка
Автозапуск приложений xorg
Если сценарий, который вы хотите запустить, требует сеанса xorg, вы можете попробовать выполнить freesktop autostart spec , который может работать или не работать в зависимости от вашей среды.
В качестве альтернативы вы можете настроить таргетинг на свою рабочую среду, описанную в https: //wiki.archlinux .org /index.php /autostarting .
Запуск скрипта как службы systemd
Если ваш скрипт соответствует описанию демона или «службы», а ваша система работает systemd , что имеет место для raspbian и самых современных linuces, тогда вы можете настроить свой сценарий для работы в качестве службы systemd - это обеспечивает грамотный контроль над жизненным циклом и средой выполнения, поскольку а также предварительные условия для запуска сценария, такие как запуск и запуск сети. Также возможно настроить перезапуск службы в случае сбоя (Restart=always
) и задержка между перезагрузкой, например RestartSec=10
).
Для общесистемного использования создайте файл systemd в разделе /etc/systemd/system
, например. с помощью vim /etc/systemd/system/autossh.service
:
[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
См. также:
Теперь мы готовы протестировать сервис:
systemctl start autossh
Проверка состояния службы:
systemctl status autossh
Остановка службы:
systemctl stop autossh
После того, как вы подтвердите, что служба работает как ожидается, включите ее с помощью:
systemctl enable autossh
ПРИМЕЧАНИЕ. В целях безопасности
systemd
запускает скрипт в ограниченной среде, аналогично тому, как выполняются скриптыcrontab
, поэтому не делайте никаких предположений о существующих системных переменных. Используйте клавишиEnvironment
, если ваш скрипт нуждается в определенных переменных. Добавлениеset -x
вверху вашего сценария bash, а затем запускsystemctl status my_service
может помочь определить, почему ваш скрипт терпит неудачу. Как правило, тупо, всегда используйте абсолютные пути для всего, включаяecho
иcat
, или явно определить ваш $ PATH.
На малине Pi3 работает Raspbian Stretch, это то, что я сделал:
Отредактируйте файл автозапуска LXDE-pi
sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
Добавьте это к нижней части этого файла
@sudo python3 /path/to/your/script.py
save & перезагрузка
Вы можете разместить свой скрипт в нижней части файла /etc/profile
.
Другие варианты не работали для меня, но это возможно потому, что я поместил свой скрипт на рабочий стол.
создать файл .sh с командами «python /path/to/your/script.py» введите 'sudo nano /etc/rc.local' и введите путь к файлу .sh
до
exit 0
Или вы можете просто ввести
crontab -e
или
sudo crontab -e
, если вы хотите, чтобы сценарий запускался при запуске
внутри типа файла в
@reboot python /path/to/your/script.py &
Способ 1:
Чтобы запустить команду автоматически при входе в систему, поместите ее в файл с именем
.bashrc
в каталоге пользователя (например, /home /pi)
Например, файл может содержать
chromium-browser --kiosk www.google.com
для запуска Chromium в полноэкранном режиме на www.google.com
Способ 2:
Это решение работает очень хорошо. После загрузки браузера в верхнем левом углу экрана появляется маленький черный квадрат, который, как представляется, является общей ошибкой (упоминается на форумах другими), но в остальном полноэкранный режим скрывает все, кроме страницы браузера.
Отредактируйте файл автозапуска:
sudo nano /etc/xdg/lxsession/LXDE/autostart
Прокомментируйте все, используя '#' в начале каждой строки, а затем добавьте следующие строки
Автозапуск браузера
@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com
При необходимости используйте инструмент настройки, чтобы включить автоматическое выполнение GUI при включении питания
sudo raspi-config
Если вам нужно вернуться в командную строку CTRL + ALT + F1
CTRL + ALT + F2
it WORKS. (при каждой перезагрузке он автоматически готовит следующие сообщения)
$ cat /etc/rc.local
#!/bin/sh -e
echo "18" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio18/direction
echo "1" > /sys/class/gpio/gpio18/value
exit 0
Это то, что я обычно делаю.
- Сохраните файл в домашнем каталоге малины pi. Например: mycode.py
-
Отредактируйте файл:
sudo nano .bashrc
-
Перейдите в конец файла и напишите:
sudo python mycode.py
-
Если вы хотите, чтобы вывод сохранялся в txt-файле, отредактируйте код на шаге 3 следующим образом:
sudo python mycode.py> gt; output.py
Надеюсь, это поможет!