Трюк для отключения автостарта сервиса без работающей systemd — например когда правишь систему с примонтированного на другом ПК диска (recovery с Mac/Live USB).

Как работает

/etc/systemd/system/multi-user.target.wants/SERVICE.service — это symlink на /lib/systemd/system/SERVICE.service. При boot systemd сканирует папку *.target.wants/ и стартует все .service симлинки.

Если symlink имеет другое расширение, systemd его игнорирует:

# до:
ls /etc/systemd/system/multi-user.target.wants/
docker.service -> /lib/systemd/system/docker.service
 
# отключить (можно даже offline с другого ПК):
mv docker.service docker.service.disabled
 
# systemd при следующем boot не стартует docker

Возврат

mv docker.service.disabled docker.service
# на работающей системе ещё:
sudo systemctl daemon-reload
sudo systemctl start docker

Когда уместно

  • Recovery: диск примонтирован на Mac/другом Linux, нет shell на Pi → правишь напрямую
  • Временно отключить сервис для теста перед перезагрузкой
  • Бэкап-сценарий: оставить файл рядом для быстрого rollback

Стандартная альтернатива (на работающей системе)

sudo systemctl disable docker.service      # удаляет symlink
sudo systemctl mask docker.service         # делает symlink на /dev/null — даже manual start невозможен
sudo systemctl enable docker.service       # восстанавливает
sudo systemctl unmask docker.service       # снимает mask

disable и mask через systemctl — правильный путь когда есть shell. .disabled-renaming — для recovery когда shell недоступен.

Реальный кейс

При boot loop recovery через Mac: отключить heavy-сервисы (Docker, smartmontools, containerd) чтобы Pi загрузился в облегчённый multi-user без них. После того как SSH работает — вернуть mv .disabled назад и systemctl daemon-reload && systemctl start.

Связано


Мета

Область:: 00 Linux