Гид по технологиям

Как включить systemd в WSL и зачем это нужно

5 min read DevOps Обновлено 16 Apr 2026
Как включить systemd в WSL
Как включить systemd в WSL

Рабочая станция в серверной стойке для разработки и тестирования

Зачем устанавливать systemd в WSL

WSL по умолчанию использует старую модель инициализации System V (init) и запускает сервисы через команду service. Начиная с сентября 2022 года Microsoft добавила опцию использования systemd. Многие популярные дистрибутивы Linux уже перешли на systemd.

Преимущества включения systemd в WSL:

  • Упрощённое управление сервисами через systemctl. Короткие и предсказуемые команды.
  • Соответствие стандартным Linux-руководствам и туториалам. Меньше правок в инструкциях.
  • Тестовая LAMP/LEMP-среда становится ближе к серверной конфигурации. Меньше сюрпризов при переносе.

Важно: systemd упрощает работу с демонами (например, Apache, MySQL, cron), но не решает все различия между WSL и полноценной виртуальной машиной.

Требования и проверка версии WSL

systemd требует WSL версии 0.67.6 или выше. Проверьте текущую версию в PowerShell:

wsl --version

Если версия ниже требуемой, обновите WSL:

wsl --update

Заметка: обновление может потребовать перезагрузки Windows. Если update не доступен — обновите WSL через Microsoft Store или каталоги обновлений по стандартному пути для вашей Windows-версии.

Пошаговая инструкция: как включить systemd в дистрибутиве WSL

  1. Откройте терминал WSL или подключитесь к нужному дистрибутиву.
  2. Откройте файл /etc/wsl.conf с правами root. Например:
sudo nano /etc/wsl.conf
  1. Добавьте (или измените) секцию boot, чтобы включить systemd:
[boot]
systemd=true

Если файл отсутствует — создайте его. Эти строки работают для любых дистрибутивов WSL (Ubuntu, Debian, Fedora и др.).

  1. Сохраните изменения и закройте редактор.

  2. Перезапустите все экземпляры WSL из PowerShell:

wsl --shutdown
  1. Откройте новый терминал WSL и проверьте systemd:
ps -p 1 -o comm=

Ожидается, что PID 1 теперь будет указывать на systemd (обычно имя процесса — systemd).

Как запускать и останавливать сервисы с systemd

После включения systemd используйте привычные команды systemctl:

Запуск Apache (пример для Debian/Ubuntu):

sudo systemctl start apache2.service

Включение автозапуска:

sudo systemctl enable apache2.service

Остановка сервиса:

sudo systemctl stop apache2.service

Для MySQL/MariaDB, cron, sshd и других сервисов команды аналогичны (замените имя сервиса).

Совет: проверяйте статус сервиса через:

sudo systemctl status <имя_сервиса>.service

Типичные сценарии и рекомендации по тестированию LAMP/LEMP

Мини-методология для проверки локального стека:

  1. Установите пакеты (apache2/nginx, mysql, php) в WSL-дистрибутиве.
  2. Включите и проверьте статусы сервисов через systemctl.
  3. Создайте простую PHP-страницу в /var/www/html и протестируйте через браузер Windows или curl внутри WSL.
  4. Протестируйте подключение к БД и логи приложения.
  5. Отключите автозапуск, проверьте работу при ручном старте — так вы увидите, какие сервисы зависят друг от друга.

Критерии приёмки:

  • Apache/Nginx возвращает 200 на тестовый URL.
  • Приложение может подключиться к локальной БД и выполнить чтение/запись.
  • Сервисы корректно стартуют/останавливаются и генерируют ожидаемые логи.

Отладка и распространённые проблемы

Важно: в некоторых случаях systemd внутри WSL может работать иначе, чем на полноценной машине. Частые проблемы и решения:

  • Сервис не стартует из-за отсутствия зависимости. Проверьте journalctl:
sudo journalctl -u <имя_сервиса>.service --since "5 minutes ago"
  • Права или SELinux: WSL по умолчанию не использует SELinux; если конфигурация пакета ожидает SELinux, некоторые сервисы могут отказывать.

  • Сетевые различия: служба может слушать на localhost внутри WSL, но не быть доступной извне. Проверьте, что слушается 0.0.0.0 или настройте проброс портов.

  • Если после включения systemd дистрибутив не грузится корректно, откатите изменения в /etc/wsl.conf и перезапустите WSL.

Когда это не работает:

  • Если ваша цель — полный эмулятор серверного окружения (низкоуровневые сетевые настройки, ядро), лучше использовать VM или контейнер с root-доступом к kernel-level функциям.

Альтернативы systemd в WSL

  • Docker / Podman: запуск приложений в контейнерах с собственным init или tini. Удобно для микросервисов.
  • Виртуальная машина (VirtualBox, Hyper-V): полная эмуляция Linux-сервера.
  • Использование удалённого тестового сервера для сближения с продом.

Каждый подход имеет свои преимущества. Systemd в WSL хорош для быстрой локальной симуляции сервисов.

Контроль безопасности и приватности

  • Сервисы, запущенные в WSL, наследуют сетевые привилегии машины Windows. Убедитесь, что вы не открываете сервисы в публичную сеть случайно.
  • Пароли и закрытые ключи храните в пределах WSL-дистрибутива и применяйте стандартные меры защиты (права на файлы, файрвол).

Чек-лист для ролей

Разработчик:

  • Проверил версию WSL и обновил при необходимости.
  • Включил systemd и перезапустил WSL.
  • Запустил необходимые сервисы и проверил функциональность приложения.

Системный администратор:

  • Проверил логи systemd.
  • Настроил автозагрузку только для нужных сервисов.
  • Обеспечил корректные настройки сети и бэкапов конфигураций.

Краткая сводка — когда выбрать systemd в WSL

  • Подходит для локальной разработки web-приложений и тестирования сервисов.
  • Удобен, если вы хотите следовать стандартным Linux-инструкциям.
  • Менее подходящ, если нужны низкоуровневые сетевые или kernel-функции — в этом случае лучше VM.

Глоссарий в одну строку

  • WSL: подсистема Windows для запуска Linux-приложений.
  • systemd: современная система инициализации и менеджер сервисов в Linux.
  • systemctl: утилита для управления сервисами в systemd.

Часто задаваемые вопросы

Нужно ли удалять старые init-скрипты?

Нет, обычно нет. systemd поддерживает многие совместимости. Удаляйте только при явной необходимости.

Повлияет ли это на другие дистрибутивы WSL?

Изменение /etc/wsl.conf применяется для конкретного дистрибутива, где вы внесли правки.

Можно ли вернуть обратно, если что-то пошло не так?

Да. Удалите или закомментируйте строку systemd=true в /etc/wsl.conf и выполните wsl –shutdown.


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

Сводка:

  • Проверьте и обновите WSL.
  • Добавьте [boot] systemd=true в /etc/wsl.conf.
  • Перезапустите WSL и управляйте сервисами через systemctl.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Показываем и управляем sideload приложениями на Android TV
Android TV

Показываем и управляем sideload приложениями на Android TV

Медленный мобильный интернет: 10 шагов для ускорения
Мобильная связь

Медленный мобильный интернет: 10 шагов для ускорения

Как выбрать тариф iCloud+ — 50GB–12TB
Облако

Как выбрать тариф iCloud+ — 50GB–12TB

Как заменить фон меню GRUB на своё изображение
Linux

Как заменить фон меню GRUB на своё изображение

Организация содержимого PS4 — полное руководство
Игры

Организация содержимого PS4 — полное руководство

Как смотреть живое ТВ в XBMC — плагины и советы
Медиа

Как смотреть живое ТВ в XBMC — плагины и советы