Запуск сценария Python при запуске

Этот вопрос задавался довольно много раз, но я, похоже, не работал, используя существующую информацию.

Мой Pi запускает Raspbian. У меня есть скрипт Python с именем dnscheck.py, который навсегда зацикливается.

Мне нужно, чтобы он запускался при загрузке. Я знаю, что мне нужно создать файл .sh, содержащий что-то вроде

sudo python dnscheck.py &

Я не знаю, где этот файл должен быть, или если он должен содержать что-либо еще. Я знаю о папке init.d, но, увидев пример скелета, я предполагаю, что должен быть более простой способ выполнить эту простую задачу.

22 голоса | спросил Vlad Schnakovszki 26 WedEurope/Moscow2012-12-26T22:06:19+04:00Europe/Moscow12bEurope/MoscowWed, 26 Dec 2012 22:06:19 +0400 2012, 22:06:19

9 ответов


15

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

Если вы просто хотите, чтобы процесс запустился, и все возможно, вы можете просто положить команду, как вы ее написали в своем вопросе, в /etc/rc.local. (У меня нет моего RPi, но я читал в Интернете, что там есть строка «exit 0», вы должны поставить свою команду над этой строкой)

ответил ikku 27 ThuEurope/Moscow2012-12-27T00:42:39+04:00Europe/Moscow12bEurope/MoscowThu, 27 Dec 2012 00:42:39 +0400 2012, 00:42:39
6

Переместите свой скрипт (мы сохраним его в файле dnscheck) на /etc/init.d/ и установите разрешения, чтобы он мог запускаться:

chmod 755 /etc/init.d/dnscheck

Добавьте теги инициализации LSB в начало вашего скрипта. Вероятно, вы захотите изменить Required-Start /Stop и теги описания в соответствии со своим сценарием.

### BEGIN INIT INFO
# Provides:          dnscheck
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Затем создайте символические ссылки, запустив

update-rc.d /etc/init.d/dnscheck defaults
ответил Bert 26 WedEurope/Moscow2012-12-26T22:55:34+04:00Europe/Moscow12bEurope/MoscowWed, 26 Dec 2012 22:55:34 +0400 2012, 22:55:34
3

Конечно, есть много способов сделать это, но не забывайте использовать cron. Если вы поместите в свой crontab строку @reboot, эта команда будет выполняться при каждом перезапуске.

Чтобы проверить, я просто добавил следующую строку к моему пользователю crontab с помощью crontab -e: @reboot echo "$(date)" >> ~/boot.txt Бонус к этому методу заключается в том, что вы можете вызывать задание по мере необходимости за другие промежутки времени, кроме времени загрузки, и вам не нужно редактировать сценарии инициализации.

ответил bobstro 25 PM000000100000002131 2015, 22:34:21
3

Я действительно удивлен, что djb daemontools здесь не упоминается. Daemontools делает правильный контроль над процессом, и вы можете добавить интересные функции, такие как автоматическое поворотное ведение журнала. TL; DR, если вы не знакомы ни с одним из них, ваш процесс будет перезагружаться каждый раз, когда он терпит неудачу, и начнется автоматически при включении Pi. Это здорово, если вы написали неудачную программу python, которая имеет режимы отказа, но вы не хотите, чтобы она просто умерла, если возникла ошибка.

Установка:

  

sudo apt-get install daemontools daemontools-run

Затем выполните шаги для создания демонтированных процессов:

Это в основном так же просто, как копирование сценария run в /etc/service/<my_custom_service_name> Еще одно преимущество: вы можете запускаться как любой пользователь или root! Подробности в ссылке.

FWIW У меня был проект Pi, в котором у меня было 3 разных процесса python (каждый из них имел цикл выполнения, используя время процессора, поэтому, используя 3 процесса, я разрешил каждому процессу использовать 1 процессорное ядро). Daemontools позволил мне убедиться, что все 3 будут автоматически запускаться и оставаться включенными после того, как я включу Pi.

ответил Sam 13 Jpm1000000pmSat, 13 Jan 2018 23:07:43 +030018 2018, 23:07:43
2

Вот решение, которое я постоянно использую.

Создать файл рабочего стола

xyz.desktop

введите в него следующее

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=<Application Name Goes here>
Comment=
Exec=  python /home/pi/Desktop/execute_on_boot.py
StartupNotify=false
Terminal=true
Hidden=false

вставьте этот файл в

/home/pi/.config/autostart/

и перезапустите свой малиновый pi, и он должен автоматически запускать вашу программу в новом терминале

ответил evolutionizer 25 PM000000100000005231 2015, 22:07:52
2

, если вы используете файл rc.local, это может быть полезно для устранения неполадок. Вы можете добавить строки журнала для регистрации ошибок (stderr) и вывода команд (stdout) в файл журнала. Согласно этому примеру файл сохраняет в /tmp/rc.local.log

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exec 2> /tmp/rc.local.log      # send stderr from rc.local to a log file
exec 1>&2                      # send stdout to the same log file

# Your other commands...

exit 0

Подробнее

ответил Tharanga 17 Maypm17 2017, 19:05:35
1

Чтобы использовать .py-файл, просто поставьте строку #!/usr/bin/python в самом начале вашего файла. Затем сделайте его исполняемым с помощью chmod +x filename. Затем добавьте строку /path/to/file.py & в /etc/rc.local до строки exit 0 (свопинг /path/to/file.py с указанием пути к вашему скрипту). Это запустит ваш скрипт python в конце загрузки.

ответил An Epic Person 25 Maypm15 2015, 18:47:57
0

Вот еще более простой метод, который работал для меня. Измените автозапуск в LXDE.

Откройте терминал и отредактируйте файл автозапуска следующим образом:

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

добавьте следующую строку текста в нижнюю часть (измените путь, если необходимо, где находится ваш example.py)

@/usr/bin/python /home/pi/example.py

ctr-x и сохраните. Возможно, вам потребуется выполнить скрипт python следующим образом:

sudo chmod +x /home/pi/example.py

ссылка для автозапуска в LXDE и ссылка для создание исполняемого файла python

ответил hydronics 9 MaramWed, 09 Mar 2016 08:25:11 +03002016-03-09T08:25:11+03:0008 2016, 08:25:11
0

эти решения не работали для меня, пытаясь запустить скрипт python с запуском Feh. Работало. Он запускает скрипт после входа в систему.

Откройте сеанс терминала и отредактируйте файл

sudo nano /etc/profile

Добавьте следующую строку в конец файла

/home/pi/your_script_name.sh

замените имя и путь скрипта на правильное имя и путь вашего сценария запуска. Сохранить и выйти

Нажмите Ctrl + X, чтобы выйти из редактора nano, а затем Y, чтобы сохранить файл.

Вот как выглядел мой скрипт.sh:

 #!/bin/sh
cd /
cd home/pi/
sudo python your_python_sript.py &
exit 0
cd /

Я думаю, что сделал исполняемый файл script.sh и script.py с помощью chmod

sudo chmod +x home/pi/your_script_name.sh
sudo chmod +x home/pi/your_python_script.py
ответил hydronics 9 MaramWed, 09 Mar 2016 02:21:41 +03002016-03-09T02:21:41+03:0002 2016, 02:21:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132