Ошибка “Unit masked” при запуске службы через systemctl — частая проблема у пользователей Linux, особенно при работе с системными сервисами. Эта статья подойдет администраторам любого уровня, поможет понять причины появления ошибки и научит быстро её устранять на практике.
Почему появляется ошибка “Unit masked”
- Служба была явно «замаскирована» (masked) администратором с помощью команды
systemctl mask. Это блокирует её запуск. - Некоторые пакеты при удалении автоматически маскируют свои юниты, чтобы предотвратить нежелательный автозапуск.
- Символическая ссылка сервиса указывает на
/dev/null— стандартный способ заблокировать юнит в systemd. - Ошибки конфигурации или ручное вмешательство в файловую структуру каталогов
/etc/systemd/systemили/lib/systemd/system.
Пошаговое решение
- Проверьте статус службы
Убедитесь, что служба действительно находится в состоянии «masked». Для этого выполните команду:
systemctl status <имя_службы>В выводе должна присутствовать строка, например:
Loaded: masked (/dev/null; bad). - Размаскируйте службу
Снимите маскировку командой:
sudo systemctl unmask <имя_службы>Эта команда удаляет символическую ссылку на
/dev/null, и теперь unit станет доступен для запуска. - Запустите службу вручную
Проверьте, запускается ли служба после размаскировки:
sudo systemctl start <имя_службы>Ошибка «systemctl unit masked» должна исчезнуть. Если появятся новые ошибки, изучите их вывод для дополнительной диагностики.
- Включите автозапуск (если необходимо)
Чтобы служба запускалась автоматически при загрузке системы, выполните:
sudo systemctl enable <имя_службы>Вы увидите сообщение о создании символических ссылок, и unit будет автоматически запускаться при старте системы.
Альтернативные методы
- Ручное удаление символической ссылки
Если команда
unmaskне сработала, можно удалить ссылку вручную:sudo rm /etc/systemd/system/<имя_службы>.serviceВнимание! Обязательно убедитесь, что это именно символическая ссылка на /dev/null. Для проверки выполните:
ls -l /etc/systemd/system/<имя_службы>.serviceУбедитесь, что в выводе есть стрелка
-> /dev/nullперед удалением. - Переустановите пакет службы
Если после размаскировки unit отсутствует или не работает, переустановите соответствующий пакет:
sudo apt install --reinstall <имя_пакета>Замените
<имя_пакета>на имя пакета, связанного с нужной службой.
Проверка результата
- Проверьте статус юнита:
systemctl status <имя_службы>В поле
Loadedне должно быть упоминания «masked». - Проверьте маскировку юнитов в системе:
systemctl list-unit-files --state=maskedУбедитесь, что ваша служба отсутствует в списке маскированных.
- Проверьте запуск службы:
sudo systemctl start <имя_службы> sudo systemctl status <имя_службы>Сервис должен находиться в состоянии «active (running)» или «inactive (dead)», но не «masked».
Как избежать ошибки “Unit masked” в будущем
- Не используйте
systemctl maskбез крайней необходимости. Для временной остановки службы достаточно командdisableилиstop. - Перед удалением или изменением файлов в
/etc/systemd/system/всегда проверяйте их содержимое. - Документируйте все изменения юнитов или используйте системы управления конфигурацией — Ansible, Puppet и др.
- Избегайте прямого редактирования юнитов пакетов, чтобы не нарушить стандартное поведение после обновлений системы.
FAQ
Почему служба снова становится masked после обновления?
Некоторые пакеты намеренно маскируют свои юниты при обновлении или удалении. Рекомендуется проверить документацию соответствующего пакета.
Чем отличается disable от mask?
Команда mask полностью блокирует запуск службы, включая ручной запуск. disable лишь отключает автозапуск при старте системы.
Можно ли безопасно размаскировать любую службу?
Нет, некоторые службы маскируют специально для повышения безопасности или предотвращения конфликтов. Перед размаскировкой рекомендуется узнать причину маскировки.
В большинстве случаев ошибка “Unit masked” устраняется за 1–2 минуты. Для дополнительной информации можно ознакомиться со статьёй Ошибка “Unit masked” при запуске, а также полезной статьёй Как замаскировать службу.