
Как сделать службу недоступной?
Иногда возникает необходимость удалить службу Systemd или хотя бы сделать её недоступной для использования.
Сам юнит файл удалять нет смысла, потому что при следующем обновлении пакета он восстановится.
Самый простой способ избавиться от службы - это удалить пакет, вместе с котором она поставляется. Сначала нужно найти путь к файлу юнита. Это можно сделать с помощью команды "status":
Теперь узнаем имя пакета, с которым служба поставляется. Если мы работаем с deb сборками, используем флаг "-S":
После того, как имя пакета известно, удаляем его:
Если вы не хотите удалять пакет, например, потому что он системный и это может что-то сломать, можно замаскировать службу.
Замаскированные службы нельзя запустить вручную и они не активируются на старте системы (даже если добавлены в автозагрузку). Для маскировки используется команда mask:
Прикольно, конечно, реализована маскировка - в системном каталоге для сервисов создается симлинка на устройство "/dev/null" (говорили о нем тут).
Если посмотрим на состояние службы, увидим, что она замаскирована:
Для того, чтобы убрать маскировку используем команду unmask. Ссылка удалится и не будет мешать старту сервиса:
LinuxCamp | #systemd
Иногда возникает необходимость удалить службу 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