Управление службами Systemd: start, stop, enable
Полное руководство по командам systemctl, файлам unit, созданию пользовательских служб, мониторингу журналов journalctl и устранению неполадок systemd на Linux-серверах.
Содержание
Управление службами Systemd: start, stop, enable
Systemd — это система инициализации и менеджер служб, используемый большинством современных дистрибутивов Linux. На Ubuntu, Debian, CentOS, AlmaLinux и RHEL systemd управляет всем: от запуска системы до управления службами. В этом руководстве рассматриваются команды systemctl, файлы unit и создание пользовательских служб.
Что такое Systemd?
Systemd — первый процесс, запускаемый после ядра Linux (PID 1). Его задачи включают:
- Запуск и остановку системных служб
- Управление зависимостями между службами
- Сбор системных журналов (journald)
- Мониторинг состояния системы
Systemd заменил старую систему инициализации SysV. Хотя скрипты /etc/init.d/ всё ещё работают, файлы unit systemd теперь являются предпочтительным подходом.
Основные команды systemctl
Проверка статуса службы
# Просмотр статуса службы
sudo systemctl status nginx
# Проверка, запущена ли служба
sudo systemctl is-active nginx
# Проверка, включена ли служба
sudo systemctl is-enabled nginx
# Список всех запущенных служб
sudo systemctl list-units --type=service --state=running
# Список неудавшихся служб
sudo systemctl list-units --type=service --state=failed
Запуск и остановка служб
# Запустить службу
sudo systemctl start nginx
# Остановить службу
sudo systemctl stop nginx
# Перезапустить службу (остановить + запустить)
sudo systemctl restart nginx
# Перезагрузить конфигурацию без остановки
sudo systemctl reload nginx
# Перезагрузить если возможно, иначе перезапустить
sudo systemctl reload-or-restart nginx
Включение и отключение служб
# Включить автозапуск при загрузке
sudo systemctl enable nginx
# Запустить и включить автозапуск
sudo systemctl enable --now nginx
# Отключить автозапуск
sudo systemctl disable nginx
# Остановить и отключить
sudo systemctl disable --now nginx
# Заблокировать службу
sudo systemctl mask nginx
# Разблокировать службу
sudo systemctl unmask nginx
Файлы unit Systemd
Файлы unit определяют, как systemd управляет службами. Два основных расположения:
/lib/systemd/system/— файлы unit, установленные менеджером пакетов/etc/systemd/system/— файлы unit, созданные/настроенные администратором
# Просмотр файла unit службы
sudo systemctl cat nginx
# Найти расположение файла unit
sudo systemctl show nginx --property=FragmentPath
# Список всех файлов unit
sudo systemctl list-unit-files --type=service
Структура файла unit
Файл .service имеет три основных раздела:
[Unit]
Description=Nginx HTTP Server
After=network.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Создание пользовательской службы
Пример: Служба для Node.js-приложения
# Создать файл unit
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/app.js
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
# Уведомить systemd о новом файле unit
sudo systemctl daemon-reload
# Запустить и включить службу
sudo systemctl enable --now myapp
# Проверить статус
sudo systemctl status myapp
Типы служб
| Тип | Описание | Применение |
|---|---|---|
simple | Основной процесс запускается напрямую | Node.js, Python |
forking | Основной процесс разветвляется и завершается | Nginx, Apache |
oneshot | Одноразовая задача | Скрипты запуска |
notify | Отправляет уведомление о готовности | Приложения с поддержкой systemd |
Управление журналами с journalctl
# Просмотр журналов конкретной службы
sudo journalctl -u nginx
# Последние 50 строк
sudo journalctl -u nginx -n 50
# Отслеживание журналов в реальном времени
sudo journalctl -u nginx -f
# Журналы за последний час
sudo journalctl -u nginx --since "1 hour ago"
# Только ошибки
sudo journalctl -u nginx -p err
# Проверить использование диска журналами
sudo journalctl --disk-usage
# Очистить старые журналы
sudo journalctl --vacuum-time=2weeks
Устранение неполадок
Служба не запускается
# Получить подробный статус
sudo systemctl status myapp -l
# Проверить последние журналы
sudo journalctl -u myapp -n 100 --no-pager
# Проверить файл unit
sudo systemd-analyze verify /etc/systemd/system/myapp.service
Забыли выполнить daemon-reload
# Всегда выполняйте после изменения файла unit
sudo systemctl daemon-reload
При разработке службы начните с Type=simple и Restart=on-failure. Оптимизируйте другие настройки после стабилизации службы.
Таймеры Systemd (альтернатива Cron)
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
# Включить таймер
sudo systemctl enable --now backup.timer
# Список всех таймеров
sudo systemctl list-timers
Заключение
Systemd — краеугольный камень современного управления Linux-серверами. Изучение команд systemctl и структуры файлов unit позволяет надёжно управлять службами. На серверах REXE вы можете создавать пользовательские службы, чтобы ваши приложения автоматически запускались после перезагрузки системы.
Связанные статьи
Подключение к VDS по SSH: PuTTY, терминал и SSH-ключи
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Подключение к Windows VDS по RDP: полное руководство
Пошаговое руководство по RDP-подключению к Windows Server VDS: настройка, безопасность NLA, правило фильтрации Path Panel и устранение неполадок.
Смена ОС VDS-сервера: пошаговое руководство (Reinstall)
Смена операционной системы VDS через панель REXE: советы по резервному копированию, поддерживаемые дистрибутивы Linux и версии Windows Server.