Введение в службы и сервисы
Введение
Службы (services) в Ubuntu — это фоновые процессы, которые обеспечивают выполнение важных задач и предоставляют системные или пользовательские функции. Примеры служб включают работу веб-серверов, системных журналов, сетевых подключений и других системных компонентов.
Службы чаще всего управляются системой инициализации systemd, которая отвечает за их автоматический запуск при загрузке системы, управление состоянием (запуск, остановка, перезапуск) и контроль их работы.
Различие между systemd
и systemctl
systemd
Это система инициализации (init system), которая используется для управления процессами в Linux. Она отвечает за загрузку системы, запуск служб, управление состояниями процессов, мониторинг и журналирование.systemd
является фоном, работающим на уровне системы, и предоставляет функциональность для управления всеми unit'ами (сервисами, целями, монтированием и т.д.).systemctl
Это инструмент командной строки, предоставляемыйsystemd
. Он используется для взаимодействия сsystemd
и управления службами (unit'ами).systemctl
позволяет запускать, останавливать, перезапускать службы, управлять их автозагрузкой и просматривать их состояние.
Пример различия:
systemd
— это сама система, которая запускает и управляет службами.systemctl
— это инструмент для работы сsystemd
.
Пример готовой службы
Для наглядности рассмотрим популярную службу nginx
, которая используется для работы веб-серверов.
Проверка статуса службы
Чтобы узнать, запущена ли служба:
systemctl status nginx
Запуск и остановка службы
sudo systemctl start nginx
sudo systemctl stop nginx
Создание своей службы
Рассмотрим процесс создания собственной службы. В качестве примера создадим службу, которая будет запускать Python-скрипт для записи текущего времени в лог. Все тоже самое можно будет проделать с каким-либо скриптом ноды, который вы будете использовать для запуска ноды
Шаг 1. Создание скрипта
Создаем файл /opt/example_script.py
:
sudo nano /opt/example_script.py
Наполнение файла будет следующим
#!/usr/bin/env python3 import time while True: with open("/var/log/example_service.log", "a") as log_file: log_file.write(f"Current time: {time.ctime()}\n") time.sleep(60)
sudo chmod +x /opt/example_script.py
Теперь мы имеем файл example_script.py, который несет в себе функционал и мы хотим сделать так, чтобы этот файл работал как фоновый процесс
Шаг 2. Создание файла службы
Создаем файл службы в директории /etc/systemd/system/
:
sudo nano /etc/systemd/system/example_service.service
Путь /etc/systemd/system/
используется для хранения пользовательских файлов служб. Это место специально предназначено для служб, созданных администратором или настроенных вручную.
Добавляем в него следующий код:
[Unit] Description=Example Python Service After=network.target [Service] ExecStart=/usr/bin/python3 /opt/example_script.py Restart=always User=root Group=root [Install] WantedBy=multi-user.target
Разбор кода:
- [Unit]:
Description
— описание службы.After
— определяет, когда служба должна запускаться (например, после сети).- [Service]:
ExecStart
— команда запуска службы.Restart
— указывает, что служба будет перезапускаться в случае сбоя.User
иGroup
— задают пользователя и группу для выполнения службы.- [Install]:
Шаг 3. Активация и запуск
sudo systemctl daemon-reload
2) Добавляем службу в автозагрузку:
sudo systemctl enable example_service
sudo systemctl start example_service
systemctl status example_service
При выводе содержимого нашего файла можем увидеть, что время прописалось в лог, соответственно программа работает
journalctl -u example_service.service
Основные поля при создании службы
При создании файла службы можно настроить множество параметров. Рассмотрим самые важные.
[Unit]
Это общий раздел для описания метаданных и зависимостей службы.
- Description — краткое описание службы, отображается в выводе
systemctl status
. - After — указывает, что данная служба должна быть запущена после определённого события или другой службы.
- Requires — обязательные зависимости (служба не будет запущена, если зависимость недоступна).
- Wants — слабые зависимости (запускаются, если доступны, но не критичны)
[Service]
Этот раздел описывает параметры запуска, выполнения и завершения службы.
- ExecStart — команда или скрипт, который запускает службу.
- ExecStop — команда для остановки службы (необязательно).
- Restart — политика перезапуска службы (например,
always
,on-failure
). - User — пользователь, под которым выполняется служба.
- Group — группа, в контексте которой работает служба.
- WorkingDirectory — директория, где будет выполняться команда.
- Environment — переменные окружения для службы.
[Install]
Этот раздел определяет, как служба интегрируется в систему. Он используется для управления автозагрузкой.
Основные команды для взаимодействия с службами
- Запуск службы
- Остановка службы:
- Перезапуск службы:
- Проверка статуса:
- Добавление в автозагрузку:
- Удаление из автозагрузки:
- Просмотр логов:
Наш телеграмм канал по нодам — https://t.me/g7team_ru
Наш чат по нодам — https://t.me/g7team_chat