diff options
Diffstat (limited to 'PYTHON/DAEMON на Python.md')
| -rw-r--r-- | PYTHON/DAEMON на Python.md | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/PYTHON/DAEMON на Python.md b/PYTHON/DAEMON на Python.md new file mode 100644 index 0000000..94416cc --- /dev/null +++ b/PYTHON/DAEMON на Python.md @@ -0,0 +1,126 @@ + +Демон — это процесс, который работает в фоновом режиме, обычно без прямого взаимодействия с пользователем. Демоны часто запускаются системой при старте и продолжают работать независимо от пользовательских сеансов. + +### Разница между демоном и обычным процессом + +Отличие демона от обычного процесса состоит в том, что демон отделён от терминала, не имеет своего интерфейса ввода-вывода и продолжает работать в фоновом режиме, даже когда пользователь завершает свою сессию. + +### Области применения демонов + +- Проверка состояния серверов и служб. +- Автоматическая фоновая обработка данных. +- Выполнение периодических задач, таких как обновление баз данных или отправка отчетов. + +## Основные библиотеки для создания демонов + +Для создания демонов на языке Python существует несколько популярных библиотек: + +- `daemon`: Простая и удобная библиотека для создания демонов. +- `systemd`: Более продвинутый инструмент для управления демонами, интегрированный с системой и использующий все её возможности. +- `multiprocessing`: Позволяет создавать многопроцессорные приложения с функциональностью демонов. + +### Преимущества и недостатки каждой библиотеки + +- **daemon**: +- Преимущества: Простота использования. +- Недостатки: Ограниченные возможности конфигурации и интеграции с системой. + +- **systemd**: +- Преимущества: Глубокая интеграция с системой, мощные возможности конфигурации. +- Недостатки: Требует знания специфики конфигурации systemd. + +- **multiprocessing**: +- Преимущества: Поддержка многопроцессорных задач. +- Недостатки: Сложность в настройке и управлении демонами. + +## Подготовка окружения Python + +Перед тем как начать писать код демона, необходимо установить необходимые библиотеки и настроить окружение Python. + +### Установка необходимых библиотек + +```plain +pip install daemon +``` + +## Написание базового демона + +Создадим базовую структуру демона, уделяя внимание функции `run_as_daemon()`. + +### Создание базовой структуры демон-программы + +```python +import daemon +import time + +def run() -> None: + """Основная функция работы демона.""" + while True: + print('Демон работает...') + time.sleep(5) + +if __name__ == '__main__': + with daemon.DaemonContext(): + run() +``` + +## Логирование и какие библиотеки использовать + +Логирование позволяет отслеживать события и ошибки, что облегчает диагностику и поддержку демона. + +### Примеры настройки логирования + +```python +import logging + +logging.basicConfig(level=logging.INFO, filename='daemon.log') + +def run() -> None: + """Основная функция работы демона с логированием.""" + while True: + logging.info('Демон работает...') + time.sleep(5) +``` + +## Обработка сигналов + +Сигналы позволяют управлять работой демона, например, корректно завершить его работу. + +### Объяснение, что такое сигналы и как их обработка помогает управлять демоном + +Сигналы — это механизмы межпроцессного взаимодействия, позволяющие одному процессу посылать уведомления другому. + +### Примеры обработки сигналов, таких как SIGTERM и SIGINT + +```python +import signal + +def handle_signal(signum: int, frame) -> None: + """Обработка сигнала завершения.""" + logging.info('Демон завершает работу...') + exit(0) + +signal.signal(signal.SIGTERM, handle_signal) +signal.signal(signal.SIGINT, handle_signal) +``` + +### Создание systemd юнита для автоматического запуска демона +```sh +[Unit] +Description=Мой Демон + +[Service] +ExecStart=/path/to/your/daemon + +[Install] +WantedBy=multi-user.target +``` + +### Как управлять демоном с помощью системных команд +```sh +sudo systemctl start my-daemon.service +sudo systemctl stop my-daemon.service +sudo systemctl enable my-daemon.service +sudo systemctl disable my-daemon.service +``` + |
