Как сделать службу недоступной?



Иногда возникает необходимость удалить службу Systemd или хотя бы сделать её недоступной для использования.



Сам юнит файл удалять нет смысла, потому что при следующем обновлении пакета он восстановится.



Самый простой способ избавиться от службы - это удалить пакет, вместе с котором она поставляется. Сначала нужно найти путь к файлу юнита. Это можно сделать с помощью команды "status":





$ systemctl status docker



docker.service - Docker Application Container Engine

Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)





Теперь узнаем имя пакета, с которым служба поставляется. Если мы работаем с deb сборками, используем флаг "-S":





$ dpkg -S /lib/systemd/system/docker.service

docker.io: /lib/systemd/system/docker.service





После того, как имя пакета известно, удаляем его:





$ sudo apt remove docker.io





Если вы не хотите удалять пакет, например, потому что он системный и это может что-то сломать, можно замаскировать службу.



Замаскированные службы нельзя запустить вручную и они не активируются на старте системы (даже если добавлены в автозагрузку). Для маскировки используется команда mask:





$ sudo systemctl mask docker

Created symlink /etc/systemd/system/docker.service → /dev/null





Прикольно, конечно, реализована маскировка - в системном каталоге для сервисов создается симлинка на устройство "/dev/null" (говорили о нем тут).



Если посмотрим на состояние службы, увидим, что она замаскирована:





$ sudo systemctl status docker

docker.service

Loaded: masked (Reason: Unit docker.service is masked.)





Для того, чтобы убрать маскировку используем команду unmask. Ссылка удалится и не будет мешать старту сервиса:





$ sudo systemctl unmask docker

Removed /etc/systemd/system/docker.service.




LinuxCamp | #systemd