Как включить 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
- Откройте терминал WSL или подключитесь к нужному дистрибутиву.
- Откройте файл /etc/wsl.conf с правами root. Например:
sudo nano /etc/wsl.conf- Добавьте (или измените) секцию boot, чтобы включить systemd:
[boot]
systemd=trueЕсли файл отсутствует — создайте его. Эти строки работают для любых дистрибутивов WSL (Ubuntu, Debian, Fedora и др.).
Сохраните изменения и закройте редактор.
Перезапустите все экземпляры WSL из PowerShell:
wsl --shutdown- Откройте новый терминал 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
Мини-методология для проверки локального стека:
- Установите пакеты (apache2/nginx, mysql, php) в WSL-дистрибутиве.
- Включите и проверьте статусы сервисов через systemctl.
- Создайте простую PHP-страницу в /var/www/html и протестируйте через браузер Windows или curl внутри WSL.
- Протестируйте подключение к БД и логи приложения.
- Отключите автозапуск, проверьте работу при ручном старте — так вы увидите, какие сервисы зависят друг от друга.
Критерии приёмки:
- 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.
Похожие материалы
Показываем и управляем sideload приложениями на Android TV
Медленный мобильный интернет: 10 шагов для ускорения
Как выбрать тариф iCloud+ — 50GB–12TB
Как заменить фон меню GRUB на своё изображение
Организация содержимого PS4 — полное руководство