Создание демона linux python

Русские Блоги

Скрипт демона Linux на основе Python3

Скрипт демона Linux на основе Python3

Во-первых, обновите питон

Скрипт написан на базе python3
, поэтому сначала вам нужно обновить Python

Посмотреть номер версии Python
Когда Python установлен в Linux (установка по умолчанию), вы можете просмотреть номер версии Python, введя простую команду:

Видно, что версия Python, поставляемая с системой, — 2.7.5.

Скачать новую версию
Откройте страницу загрузки Python и выберите необходимую версию.

Здесь я выбрал версию 3.7.2.

распаковать
После завершения загрузки разархивируйте:

Конфигурация установки
Войдите в распакованный каталог, установите и настройте:

При выполнении ./configure, если выдается сообщение об ошибке:

configure: error: no acceptable C compiler found in $PATH

Это означает, что не установлен подходящий компилятор. В это время вам необходимо установить / обновить gcc и другие зависимые пакеты.

После завершения повторите:

Скомпилировать и установить
После завершения настройки вы можете скомпилировать:

Долгое ожидание . После его завершения устанавливаем:

проверка
После успешной установки вы можете проверить версию Python:

Один — это старая версия 2.x, а другой — новая версия 3.x.

Примечание. В каталоге / usr / local / bin / есть ссылка на python3, указывающая на python 3.7 в каталоге bin.

Установите 3.x как версию по умолчанию
Проверьте путь к Python в / usr / bin. Вы можете видеть, что python связан с python 2.7, поэтому выполнение python эквивалентно выполнению python 2.7.

Переименуйте исходную программную ссылку python:

Свяжите python с python3:

В это время проверьте версию Python:

Результатом будет 3.x, что указывает на использование python3.

Настроить yum
После обновления Python, поскольку python по умолчанию указывает на python3, yum нельзя использовать в обычном режиме. Вам необходимо отредактировать файл конфигурации yum:

Измените #! / Usr / bin / python на #! / Usr / bin / python2.7, сохраните и выйдите.

Источник

Легко настраиваемый python daemon

В какой-то момент мне потребовалось демонизировать некоторое действие на python. В сети валялась куча примеров подобной деятельности разной степени собранности. Так как в дальнейшем предполагалось использовать код демонизации в дальнейшей деятельности я решил разнести на разные части настройки и собственно демона.
В итоге файлов получилось три:

  • Родительские классы — с небольшим изменением классы взятые из интернет статей
  • Классы настройки — реакция на сигналы, реакция на команды и набор статических настроек для запуска
  • Скрипт запуска — собирает первые два в собственно демона

Дальше я попробую описать логику работы всех трех.

Сразу скажу, что все есть на Гитхабе. Потому как если вы легко читаете питон — читать мой весьма неумелый текст может оказаться гораздо сложнее.

Собственно в первом файлике описывать толком нечего: Это почти неизменные три класса, взятые из этой статьи. Из изменений там только то, что к самому демону был прикреплен класс обработчик сигналов, и добавление сигналов в список обрабатываемых было вкручено в собственно процедуру демонизации.

Вторая часть будет чуть интереснее. Там присутствует три класса:
1) SigFunctionsCon — содержит реакцию на сигналы. При инициализации получает экземпляр демона, чтобы уметь обращаться к его методам. Каждый метод должен соответствовать сигналу, который он обрабатывает названием. Например так:

Внутренние методы и поля могут быть какими угодно.

2)ReactFunctionCon — содержит реакцию на консольные команды. При инициализации так же получает демона. Каждый метод по названию должен соответствовать команде на которую он будет реагировать и может принимать аргументы (то, что собственно идет за командой в командной строке). Например:

3)StatCon — содержит всякие статические настройки демона. На данный момент выглядит так:

Соответственно —
Хелп строка, выводимая при неправильной передаче аргументов в какую-либо функцию (Возможно следует сделать команду хелп по умолчанию, которая выводит это сообщение?).
Метод run — собственно то, для чего все затевалось — то, что демон делает.
Адрес pid файла — для хранения процесса и все такое.
Ввод, вывод, ошибки — логгирование и прочее. По умолчанию отсылается в /dev/null

Центровой скрипт представляет интерес исключительно кодом. В общем говоря он наследует класс демона, собирает все настройки с предыдущего файла и раскладывает их по демону, и принимает команды.

Читайте также:  Проигрыватель windows media не записывает диски

Ну и собственно вопросы:
Что не так, что не очень так?
Как по вашему следует ли как-то приписывать к этому GPL, или не стоит больгеносить, и все это слишком несерьезно?
Достаточно ли адекватно я указал предыдущих авторов?

Источник

Как вы создаете демон в Python?

Поиск в Google показывает фрагменты кода x2. Первый результат — этот рецепт кода, который содержит много документации и пояснений, а также некоторые полезное обсуждение под.

Тем не менее, другой пример кода, хотя и не содержит так много документации, содержит пример кода для передачи таких команд, как начать, остановить и перезапустить. Он также создает PID-файл, который может быть полезен для проверки, запущен ли демон и т. Д.

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

15 ответов

Текущее решение

Исторический ответ

Возможно, это не прямой ответ на вопрос, но systemd можно использовать для запуска приложения в качестве демона. Вот пример:

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

YapDi — это относительно новый модуль Python, который появился в Hacker News. Выглядит довольно полезно, может использоваться для преобразования скрипта Python в режим демона изнутри скрипта.

Вот мой базовый демон Python ‘Howdy World’, с которого я начинаю, когда разрабатываю новое приложение-демон.

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

Затем просто начните с ./howdy.py start и остановите с ./howdy.py stop .

Альтернатива — создать обычную недемонизированную программу на Python, а затем внешне ее демонизировать, используя supervisord. Это может сэкономить много головной боли и является переносимым на * nix- и язык.

После нескольких лет и многих попыток (я попробовал все ответы, приведенные здесь, но все они имели незначительные недостатки в конце), теперь я понимаю, что есть лучший способ, чем запуск, остановка, перезапуск демона непосредственно из Python : используйте вместо этого инструменты ОС.

Например, для Linux вместо python myapp start и python myapp stop я делаю это для запуска приложения:

Или screen -dmS myapp python myapp.py чтобы запустить и отключить его одной командой.

Подключить к этому терминалу снова. Оказавшись в терминале, можно использовать CTRL + C, чтобы остановить его.

В 80% случаев, когда люди говорят «демон», им нужен только сервер. Поскольку вопрос в этом вопросе совершенно неясен, трудно сказать, какой может быть область возможных ответов. Поскольку сервер достаточно, начните с него. Если фактический «демон» действительно необходим (это редко), прочитайте nohup как способ демонизации сервера.

До тех пор, пока фактический демон фактически не требуется, просто напишите простой сервер.

«Есть ли какие-то дополнительные вещи, которые необходимо учитывать?» Да. Около миллиона вещей. Какой протокол? Сколько запросов? Как долго обслуживать каждый запрос? Как часто они будут приезжать? Будете ли вы использовать выделенный процесс? Потоки? Подпроцессы ? Написание демона — большая работа.

Самый простой способ создать демон с помощью Python — это использовать Twisted управляемую событиями среду. Он обрабатывает все вещи, необходимые для демонизации для вас. Он использует Шаблон Reactor для обработки одновременных запросов.

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

предотвращение дампов ядра (многие демоны запускаются от имени root, а дампы ядра могут содержать конфиденциальную информацию)

вести себя правильно внутри chroot тюрьмы

установить UID, GID, рабочий каталог, umask и другие параметры процесса соответственно для варианта использования

отказаться от повышенных suid , sgid привилегий

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

вести себя корректно, если он запущен в уже отсоединенном контексте, таком как init , inetd и т. д.

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

перенаправить стандартные потоки stdin , stdout , stderr , поскольку у процесса-демона больше нет управляющего терминала

обрабатывать PID-файл как совместную консультативную блокировку, которая представляет собой целое банку червей в себе со многими противоречивыми, но обоснованными способами поведения

разрешить надлежащую очистку после завершения процесса

Читайте также:  Email spoofing kali linux

фактически становится процессом демона, не приводя к зомби

Некоторые из них являются стандартными , как описано в канонической литературе по Unix ( Расширенное программирование в среде UNIX , покойным У. Ричардом Стивенсом, Addison-Wesley, 1992). Другие, такие как перенаправление потока и обработка файла PID Обычное поведение , которого ожидают большинство пользователей демонов, но они менее стандартизированы.

На все это распространяется PEP 3143 «Стандартная библиотека процессов демона». «спецификация . python-daemon справочная реализация работает на Python 2.7 или более поздней версии и Python 3.2 или более поздней версии ,

Эта функция преобразует приложение в демон:

Источник

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

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

15 ответов

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

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

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

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

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

Источник

Как создать демона в Python?

поиск в Google показывает фрагменты кода x2. Первый результат -этот код рецепт который имеет много документации и объяснений, а также некоторые полезные обсуждения ниже.

, еще один пример кода, хотя и не содержит так много документации, включает пример кода для передачи команд, таких как start, stop и restart. Он также создает PID-файл, который может быть удобен для проверки, если демон уже бег и т. д.

эти примеры объясняют, как создать демона. Есть ли какие-то дополнительные вещи, которые необходимо учитывать? Один пример лучше другого, и почему?

15 ответов

текущее решение

исторические ответа

Сандер предводителя пример кода превосходит оригинал, который был первоначально опубликован в 2004 году. Однажды я дал демонизатор для Пиро, но, вероятно, использовал бы код Сандера, если бы мне пришлось сделать это снова.

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

предотвращение дампов ядра (многие демоны работают как root, а дампы ядра могут содержать конфиденциальную информацию)

вести себя правильно внутри chroot тюрьма

установите UID, GID, рабочий каталог, umask и другие параметры процесса соответствующим образом для использования дело

отказаться от повышенных suid , sgid льготы

закрыть все открытые файловые дескрипторы, с исключениями в зависимости от использования

вести себя правильно, если запущен внутри уже отсоединенного контекста, например init , inetd , etc.

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

перенаправить стандартные потоки stdin , stdout , stderr поскольку процесс демона больше не имеет управляющего терминала

обрабатывать PID-файл в качестве совместной консультативной блокировки, которая является целая банка червей в себе со многими противоречивыми, но действительными способами поведения

разрешить правильную очистку при завершении процесса

фактически стать демоном процесс, не приводящий к зомби

некоторые из них являются стандартный, как описано в канонической литературе Unix (расширенное программирование в среде UNIX, покойным У. Ричард Стивенс, Аддисон-Уэсли, 1992). Другие, такие как перенаправление потока и обработка файлов PID, are обычное поведение большинство пользователей daemon ожидали бы, но это меньше стандартизированный.

Читайте также:  Драйвера для honor 7a pro для windows

все они покрыты PEP 3143 «стандартная библиотека процессов демона» спецификация. The python-daemon справочная реализация работает на Python 2.7 или более поздней версии и Python 3.2 или более поздней версии.

вот мой основной демон Python «Howdy World», с которого я начинаю, когда разрабатываю новое приложение демона.

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

тогда просто начните с ./howdy.py start и с ./howdy.py stop .

Примечание python-daemon пакет, который решает много проблем за демонами из коробки.

среди других функций он позволяет (из описания пакета Debian):

  • снимите процесс в свои группы процесс.
  • установите среду процесса, подходящую для работы внутри chroot.
  • откажитесь от привилегий suid и sgid.
  • закрыть все открытые дескрипторы файлов.
  • изменить каталог, uid, gid и umask.
  • установить соответствующие обработчики сигналов.
  • откройте новые файловые дескрипторы для stdin, stdout и stderr.
  • управление указанным файлом блокировки PID.
  • Регистрация функции очистки для обработки при выходе.

альтернатива — создайте нормальную, недемонизированную программу Python, а затем внешне демонизируйте ее с помощью supervisord. Это может сэкономить много головных болей,и * Nix-и язык-портативный.

вероятно, это не прямой ответ на вопрос, но systemd можно использовать для запуска приложения в качестве демона. Вот пример:

Я предпочитаю этот метод, потому что большая часть работы выполняется для вас, а затем ваш сценарий демона ведет себя аналогично остальной части вашей системы.

YapDi является относительно новым модулем python, который появился в Hacker News. Выглядит довольно полезно, может использоваться для преобразования скрипта python в режим демона изнутри скрипта.

поскольку python-daemon еще не поддерживает python 3.x, и из того, что можно прочитать в списке рассылки, возможно, никогда не будет, я написал новую реализацию PEP 3143: pep3143daemon

pep3143daemon должны поддерживать, по крайней мере, в Python 2.6, 2.7 и 3.x

Он также содержит класс PidFile.

библиотека зависит только от стандартной библиотеки и от шести модулей.

его можно использовать как падение в замене для питон-демон.

Я боюсь, что модуль демона, упомянутый @Dustin, не работал для меня. Вместо этого я установил python-daemon и использовал следующий код:

просто для полноты вот samplemodule содержимое каталога

содержание moduleclass.py может быть

эта функция преобразует приложение в демона:

еще одну вещь, чтобы думать о том, когда daemonizing в Python:

Если вы используете python лесозаготовки и вы хотите продолжить использовать его после daemonizing, убедитесь, что вызов close() на обработчиках (особенно обработчиках файлов).

Если вы этого не сделаете, обработчик все еще может думать, что у него открыты файлы, и ваши сообщения просто исчезнут — другими словами, убедитесь, что регистратор знает, что его файлы закрыты!

это предполагает, когда вы daemonise вы закрываете все открытые дескрипторы файлов без разбора — вместо этого вы можете попробовать закрыть все, кроме файлов журнала (но обычно проще закрыть все, а затем снова открыть те, которые вы хотите).

Я изменил несколько строк в примере кода Сандера Марешаля (упомянутом @JeffBauer в принято отвечать), чтобы добавить quit() метод, который выполняется до остановки демона. Иногда это очень полезно.

примечание: Я не использую модуль «python-daemon», потому что документация все еще отсутствует (см. Также многие другие вопросы SO) и довольно неясна (как правильно запустить/остановить демона из командная строка с этим модулем?)

после нескольких лет и многих попыток, теперь я понимаю, что есть лучший способ, чем желание начать, остановить, перезапустить демона непосредственно с Python: вместо этого используйте инструменты ОС!

короче говоря, вместо того, чтобы делать python myapp start и python myapp stop , Я делаю это, чтобы запустить приложение:

чтобы снова подключиться к этому терминалу. Оказавшись в терминале, можно используйте CTRL+C, чтобы остановить его.

самый простой способ создать демон с Python-использовать Twisted event-driven framework. Он обрабатывает все вещи, необходимые для демонизации Для вас. Он использует Схема Реактора для обработки одновременных запросов.

80% времени, когда люди говорят «демон», они только хотят сервер. Поскольку вопрос совершенно неясен по этому вопросу, трудно сказать, какова может быть возможная область ответов. Поскольку сервер является адекватным, начните там. Если фактический «демон» действительно нужен (это редко), прочитайте nohup как способ демонизации сервер.

пока не потребуется фактический демон, просто напишите простой сервер.

Источник

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