Ошибка “System has not been booted with systemd” часто встречается у пользователей Linux, работающих под WSL (Windows Subsystem for Linux) или в Docker-контейнерах. В этой статье мы разберём причины появления этой ошибки и приведём пошаговые инструкции по её устранению.
Почему появляется ошибка “system has not been booted with systemd”
- Ваша среда (WSL, Docker-контейнер) по умолчанию не запускает systemd как init-процесс.
- Некоторые инструменты и системные сервисы Linux зависят от systemd, а он не запущен.
- В старых версиях WSL (WSL 1 и ранних версиях WSL 2) отсутствует поддержка systemd.
- В Docker-контейнерах systemd не запускается без дополнительной настройки Dockerfile или параметров запуска.
Пошаговое решение
- Определите вашу среду выполнения
Убедитесь, что вы действительно работаете под WSL или в Docker-контейнере. Выполните команду:uname -aЕсли в выводе есть слово
Microsoft— вы в WSL. Если упоминаетсяdocker— это контейнер Docker. - Проверьте, запущен ли systemd
Выполните команду:ps -p 1 -o comm=Если вывод показывает
init,bashилиsh, значит systemd не запущен как основной процесс (PID 1). Для полноценной работы сервисов systemd должен быть именно init-процессом. - Включите поддержку systemd в WSL 2 (Windows 11, версия 22000 и выше)
Данная функция доступна только в WSL 2 на Windows 11. Для включения поддержки systemd создайте или откройте файл
.wslconfigв вашем домашнем каталоге Windows:notepad %UserProfile%.wslconfigДобавьте в файл следующие строки:
[wsl2] systemd=trueПерезапустите WSL, чтобы применить изменения:
wsl --shutdownПосле перезапуска systemd будет стартовать автоматически в вашем дистрибутиве WSL 2. Повторите команду из шага 2 — в выводе должен появиться
systemd. - Запуск systemd в Docker-контейнере
Для запуска контейнера с systemd используйте команду с дополнительными параметрами:
docker run --privileged --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:ro -d ubuntu:22.04 /lib/systemd/systemdЭта команда создаёт контейнер на базе Ubuntu 22.04, где systemd будет запущен как процесс PID 1. Внимание: флаг
--privilegedрасширяет права контейнера, что может быть небезопасно. Используйте его только в надежных средах и не применяйте в продакшне без предварительного анализа. - Использование альтернатив без systemd
Если вы не можете включить native systemd (например, в WSL 1 или на shared-хостингах), можно использовать старые команды управления сервисами:
service startЭто классический способ управления сервисами, который работает без systemd.
Альтернативные методы
- Используйте дистрибутивы WSL с поддержкой systemd “из коробки”, например Ubuntu 22.04 и новее, в сочетании с настройкой
.wslconfig. - Переустановите дистрибутив, если система сильно повреждена — иногда проще начать с чистого листа.
- Применяйте инструменты, такие как
systemd-genie— это workaround для запуска systemd в WSL, однако его настройка требует отдельного изучения и прав суперпользователя.
Проверка результата
- Убедитесь, что systemd запущен как init-процесс:
ps -p 1 -o comm=Ожидаемый результат:
systemd - Проверьте работу systemd-сервисов:
systemctl statusОтобразится список активных служб без ошибки “System has not been booted with systemd”.
- В WSL проверьте наличие переменной окружения:
echo $WSL_INTEROPЕсли переменная задана — вы действительно в WSL 2.
Как избежать ошибки в будущем
- Выбирайте дистрибутивы и версии, обеспечивающие поддержку systemd (например, WSL 2 на Windows 11 и современные Linux-образы).
- Для Docker-контейнеров сразу настраивайте запуск systemd через Dockerfile или параметры запуска.
- Следите за обновлениями WSL и Docker — новые версии улучшают поддержку systemd.
FAQ
Поддерживает ли WSL 1 systemd?
Нет, systemd официально поддерживается только в WSL 2 на Windows 11 (начиная с версии 22000+).
Безопасно ли использовать --privileged в Docker?
Нет, этот флаг расширяет права контейнера до максимальных. Используйте его с осторожностью и только в доверенных средах. В продакшене лучше применять более изолированные методы запуска сервисов.
Можно ли запускать systemctl в обычном терминале WSL без поддержки systemd?
Нет. Без включённого systemd команды systemctl вызовут ошибку. В таких случаях используйте service или другие альтернативы.
Теперь вы знаете, почему появляется ошибка “system has not been booted with systemd” и как её устранить в различных средах.