Создать службу linux python

Создание службы для запуска скрипта

Добрый день! Есть скрипт написанный на python он берет и записывает данные в базу SQLite в том же каталоге. Хочу запускать его как службу, сделал конфиг /etc/systemd/system/pythonscript.service

При запуске данной службы в логах ошибка python, что файл БД не найден. Подскажите, пожалуйста, как правильно создать службу или куда необходимо положить файл БД, чтоб это работало?

Убери это, systemd — не шелл.

Type=oneshot или Type=simple

Подскажите, пожалуйста, как правильно создать службу

1. Создаёшь /usr/bin/pepiaka.sh , в котором пускаешь свой pepiaka.py . Проверяешь, как оно работает из консольки.

2. Создаёшь unit для запуска /usr/bin/pepiaka.sh .

0. Твой скрипт должен уметь обрабатывать SIGTERM , SIGINT

в systemd не используется башевский синтаксис. Либо явно пропиши в ExecStart команду bash -c «. «, либо перенаправляй вывод с помощью StandardOutput и StandardError.

При запуске данной службы в логах ошибка python, что файл БД не найден.

Скрипт при ручном запуске-то работает вообще? Для sqlite путь к файлу с бд нужно указывать, когда connection создаешь. Если не находит файл — значит путь неправильный, очевидно.

ExecStart = /usr/bin/python3 ‘/home/pi/script/index.py’ > /home/pi/script/script.log 2>$1

По-хорошему все эти «кишки» лучше прятать в ваш скрипт. Для логирования модуль logging.

Путь до файла бд в вашем случае вероятно тоже стоит указывать или абсолютный, или же определять через os.path.dirname. Это вам позволит убрать тучу спецэффектов с запуском скрипта.

1. Создаёшь /usr/bin/pepiaka.sh, в котором пускаешь свой pepiaka.py. Проверяешь, как оно работает из консольки.

Если БД указана через relative-path его это никак не спасёт( FileNotFoundError)

Источник

Запуск python скрипта в Linux

Python — очень популярный язык программирования для написания различных системных скриптов в Linux. В Windows, там где не хватает возможностей командной оболочки используется PowerShell. В Linux же, когда возможностей Bash не хватает используется язык Python.

На этом языке написано огромное количество системных программ, среди них пакетный менеджер apt, видеоредактор OpenShot, а также множество скриптов, которые вы можете установить с помощью утилиты pip. В этой небольшой статье мы рассмотрим как запустить Python скрипт в Linux с помощью терминала различными способами.

Запуск python скрипта в Linux

Для примера нам понадобится Python скрипт. Чтобы не брать какой-либо из существующих скриптов, давайте напишем свой:

print(«Hello from losst!»)

Для того чтобы запустить скрипт необходимо передать его интерпретатору Python. Для этого просто откройте терминал с помощью сочетания клавиш Ctrl + Alt + T, перейдите в папку со скриптом и выполните:

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

Читайте также:  Ac3 кодек для windows

python -i script.py

Но как вы могли заметить, при запуске apt или openshot не надо писать слово python. Это намного удобнее. Давайте разберемся как это реализовать. Если вы не хотите указывать интерпретатор в командной строке, его надо указать в самом скрипте. Для этого следует в начало скрипта добавить такую строчку:

Сохраните изменения, а затем сделайте файл скрипта исполняемым с помощью такой команды:

chmod ugo+x script.py

После этого можно запустить скрипт Python просто обращаясь к его файлу:

Если убрать расширение .py и переместить скрипт в каталог, находящийся в переменной PATH, например /usr/bin/, то его можно будет выполнять вот так:

Как видите, запуск команды python Linux выполняется довольно просто и для этого даже есть несколько способов. А каким способом пользуетесь вы? Напишите в комментариях!

Источник

Как заставить скрипт Python запускаться как сервис или демон в Linux

Я написал скрипт Python, который проверяет определенный адрес электронной почты и передает новые сообщения во внешнюю программу. Как я могу заставить этот скрипт выполняться 24/7, например превратить его в демон или службу в Linux. Нужен ли мне цикл, который никогда не заканчивается в программе, или это можно сделать, просто повторяя код несколько раз?

13 ответов

У вас есть два варианта.

Сделайте правильную работу cron , которая вызывает ваш скрипт. Cron — это общее имя для демона GNU / Linux, который периодически запускает скрипты в соответствии с заданным вами расписанием. Вы добавляете свой скрипт в crontab или помещаете символическую ссылку на него в специальный каталог, и демон выполняет его запуск в фоновом режиме. Вы можете узнать больше в Википедии. Существует множество различных демонов cron, но в вашей системе GNU / Linux она должна быть уже установлена.

Используйте своего рода подход python (например, библиотеку), чтобы ваш сценарий мог демонизировать себя. Да, это потребует простой петли событий (где ваши события запускаются по таймеру, возможно, обеспечивается функцией сна).

Я бы не рекомендовал вам выбирать 2., потому что вы на самом деле повторяете функциональность cron. Системная парадигма Linux — позволить нескольким простым инструментам взаимодействовать и решать ваши проблемы. Если нет дополнительных причин, по которым вы должны создавать демона (помимо периодического запуска), выберите другой подход.

Кроме того, если вы используете daemonize с циклом и происходит сбой, никто не будет проверять почту после этого (как указал Иван Невоструев в комментариях к этот ответ). Хотя, если скрипт добавлен как задание cron, он просто сработает снова.

Используйте любой сервисный менеджер, который предлагает ваша система — например, в Ubuntu используйте upstart . Это будет обрабатывать все детали для вас, такие как запуск при загрузке, перезапуск при сбое и т. Д.

Чтобы создать какую-то вещь, которая работает как сервис, вы можете использовать эту вещь:

Первое, что вы должны сделать, это установить Cement: Фреймворк цемента — это фреймворк CLI, в котором вы можете развернуть на нем свое приложение.

Читайте также:  Lenovo g500 touchpad driver windows 10

Интерфейс командной строки приложения:

Имейте в виду, что ваше приложение должно работать в потоке, чтобы быть демоном

Чтобы запустить приложение, просто сделайте это в командной строке

Я бы порекомендовал это решение. Вам нужно наследовать и переопределять метод run .

Сначала прочитайте псевдонимы почты. Почтовый псевдоним будет делать это внутри почтовой системы без необходимости дурачиться с демонами или службами или чем-то в этом роде.

Вы можете написать простой скрипт, который будет выполняться sendmail каждый раз, когда почтовое сообщение отправляется на определенный почтовый ящик.

Если вы действительно хотите написать ненужно сложный сервер, вы можете сделать это.

Это все, что нужно. Ваш сценарий просто зацикливается и спит.

Если вы используете терминал (ssh или что-то еще) и хотите, чтобы после выхода из терминала долгое время работал скрипт, вы можете попробовать это:

apt-get install screen

Создать виртуальный терминал внутри (а именно abc): screen -dmS abc

Теперь мы подключаемся к abc: screen -r abc

Итак, теперь мы можем запустить скрипт Python: python Keep_sending_mail.py

Отныне вы можете напрямую закрыть свой терминал, однако скрипт python будет продолжать работать, а не выключаться

Поскольку этот Keep_sending_mail.py PID принадлежит виртуальному экрану, а не Терминал (SSH )

Если вы хотите вернуться и проверить состояние выполнения скрипта, вы можете снова использовать screen -r abc

Как насчет использования команды $nohup в Linux?

Я использую его для запуска своих команд на моем сервере Bluehost.

Пожалуйста, сообщите, если я не прав.

Простая и поддерживаемая версия — Daemonize .

Установите его из Python Package Index (PyPI):

А затем используйте как:

cron — отличный выбор для многих целей. Однако он не создает службу или демон, как вы запросили в OP. cron просто запускает задания периодически (т.е. задание запускается и останавливается), и не чаще, чем раз в минуту. Существуют проблемы с cron — например, если предыдущий экземпляр вашего сценария все еще выполняется в следующий раз, когда расписание cron появляется и запускает новый экземпляр, это нормально? cron не обрабатывает зависимости; он просто пытается начать работу, когда расписание говорит.

Если вы обнаружите ситуацию, когда вам действительно нужен демон (процесс, который никогда не останавливается), взгляните на supervisord . Он предоставляет простой способ обернуть обычный, недемонизированный скрипт или программу и заставить его работать как демон. Это гораздо лучший способ, чем создание нативного демона Python.

Вы также можете запустить скрипт Python как сервис, используя скрипт оболочки. Сначала создайте сценарий оболочки для запуска сценария Python, как этот (имя сценария произвольное имя)

Теперь создайте файл в /etc/init.d/scriptname

Теперь вы можете запускать и останавливать ваш скрипт на python, используя команду /etc/init.d/scriptname start или stop.

Вы можете использовать fork () для отсоединения вашего скрипта от tty и продолжения его работы, вот так:

Конечно, вам также нужно реализовать бесконечный цикл, как

Надеюсь, это поможет вам.

Вы должны использовать библиотеку python-daemon, она обо всем позаботится.

Читайте также:  Как связать airpods с windows

Из PyPI: Библиотека для реализации хорошо работающего процесса демона Unix.

Источник

Как установить в автозапуск python-скрипт используя systemd

Иногда требуется какой-то скрипт или программу запускать как системный сервис. Это можно легко провернуть, если в вашем дистрибутиве используется система инициализации и управления демонами — systemd.

Для примера, я создам простейший python-скрипт который будет слушать 9988 порт и добавлю его в автозагрузку при старте операционной системы.

1. Простой python-scrypt

2. Создание файла сервиса.

Теперь создадим файл сервиса для с помощью которого расскажем systemd что нам требуется. Файл должен иметь расширение .service и находиться в директории /lib/systemd/system/

Добавим информацию о нашем сервисе (можете изменить местоположение скрипта и описание сервиса):

Мне кажется из содержимого всё и так понятно — какая строка и за что отвечает.

3. Включение нового добавленного сервиса.

Вы добавили, наконец-то, ваш сервис в систему. теперь необходимо перезапустить демон systemctl чтобы он прочел новый файл. Каждый раз как вы вносите изменения в .service файлы вам нужно перезапустить демон.

Теперь включим запуск сервиса при загрузке системы, и запустим сам сервис.

4. Запуск/Остановка/Статус сервиса

В конце проверим статус нашего нового сервиса:

Проверим что наш python-скрипт слушает нужный нам порт:

Команды для запуска, остановки и перезапуска сервиса:

Источник

Как заставить скрипт Python работать как сервис или демон в Linux

Я написал скрипт Python, который проверяет определенный адрес электронной почты и передает новые электронные письма внешней программе. Как я могу заставить этот скрипт работать 24/7, например, превратить его в демона или службу в Linux. Нужен ли мне также цикл, который никогда не заканчивается в программе, или это можно сделать, просто выполнив код повторно несколько раз?

15 ответов

У вас есть два варианта здесь.

сделать правильный cron-задание это вызывает ваш сценарий. Cron-это общее имя для демона GNU / Linux, который периодически запускает скрипты в соответствии с установленным расписанием. Вы добавляете свой скрипт в crontab или помещаете символическую ссылку на него в специальный каталог, и демон обрабатывает задание его запуска в фоновом режиме. Ты можешь!—7—>подробнее в Википедии. Есть различные демоны cron, но ваша система GNU / Linux должна быть уже установлена.

использовать какой-то python подход (например, библиотека), чтобы ваш скрипт мог демонизировать себя. Да, это потребует простого цикла событий (где ваши события запускают таймер, возможно, обеспечивается функцией сна).

Я бы не рекомендовал вам выбирать 2., потому что вы фактически повторяете функциональность cron. Парадигма системы Linux заключается в пусть несколько простых инструментов взаимодействуют и решают ваши проблемы. Если нет дополнительных причин для создания демона (в дополнение к периодическому запуску), выберите другой подход.

кроме того, если вы используете daemonize с циклом и происходит сбой, никто не будет проверять почту после этого (как указано Невоструев Иван в комментарии этой ответ). В то время как, если скрипт добавлен как задание cron, он просто снова запустится.

Источник

Оцените статью