Автор оригинала: Леннарт Поттеринг (Lennart Poettering).
Заголовок: systemd for Administrators, Part V. The three levels of "off".
Ссылка: http://0pointer.de/blog/projects/three-levels-of-off.html.
Дата: 02.03.2011.
Три уровня "Off"
В systemd существует три уровня отключения службы (или других юнитов). Давайте посмотрим, что они представляют из себя:-
Вы можете остановить службу. Это простое прекращение работы выполняющегося экземпляра службы, и не более того. Если служба будет запрошена каким-либо способом (вручную, через сокет или шину, при запуске системы или же при подключении устройства), то она снова будет запущена.
Остановка службы - это очень простое и временное действие. Например, остановим службу NTP:
$ systemctl stop ntpd.service
Этот способ почти эквивалентен следующей традиционной команде, которая доступна в большинстве систем, использующих SysV:$ service ntpd stop
Стоит отметить, что если вы выполните последнюю команду на Fedora 15, то она будет прозрачно преобразована в первую.
-
Вы можете отключить сервис. При этом служба будет отвязана от активирующих ее триггеров. При этом служба больше не будет стартовать при загрузке, через сокет или шину, при подключении устройства (или при наступлении любого другого события, ранее приводившего к запуску службы). Однако, если понадобится, вы все еще можете запустить ее вручную. Если вы отключаете (disable) уже запущенный сервис, то это не приведет к его остановке (stop). Вот пример, как отключить службу:
$ systemctl disable ntpd.service
Традиционно в Fedora отключение службы делалось так:$ chkconfig ntpd off
В Fedora 15 последняя команда также будет прозрачно преобразована, если необходимо.
Часто необходимо одновременно отключить и остановить службу, чтобы избавиться от текущего экземпляра и убедиться, что он не будет запущен снова (за исключением ручного запуска):$ systemctl disable ntpd.service
Такие команды, как эти, например, используются при удалении пакетов служб в Fedora.
$ systemctl stop ntpd.service
Отключенная служба будет находиться в этом состоянии постоянно (пока вы не включите ее), независимо от количества перезагрузок системы.
-
Вы можете замаскировать службу. Это как отключение службы, но "на стероидах". При этом служба не будет когда-либо запущена не только автоматически, но и в ручную. Эта возможность скрыта в systemd, т.к. обычно она не нужна и может запутать пользователя. Но вот как можно это сделать:
$ ln -s /dev/null /etc/systemd/system/ntpd.service
Создав для службы символическую ссылку на "/dev/null", вы сообщите systemd, что запуск службы нежелателен и следует блокировать такие попытки. Юнит файлы, хранящиеся в "/etc/systemd/system" имеют приоритет над расположенными в "/lib/systemd/system" и имеющими такое же имя. Первый каталог - это территория администратора системы, последний же - пакетного менеджера. Установив символическую ссылку в "/etc/systemd/system/ntpd.service", вы можете быть уверены, что systemd никогда не будет читать исходный файл службы "/lib/systemd/system/ntpd.service".
$ systemctl daemon-reload
systemd опознает юниты, ссылающиеся на "/dev/null" и покажет их как "masked". Если вы попробуете запустить службу вручную (например, через "systemctl start"), то это приведет к ошибке.
Подобного трюка нет в SysV (официально). Однако, есть несколько неофициальных хаков, таких как добавление в начало скрипта инициализации команды "exit 0" или удаление бита исполнения (отображается как "x" в выводе команды "ls -l"). Однако, эти решения имеют различные недостатки, например, они вмешиваются в работу менеджера пакетов.
Маскировка службы, как и отключение, является изменением постоянным.
И это все на сегодня. Спасибо за внимание!