Трюк для отключения автостарта сервиса без работающей 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 # снимает maskdisable и 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.
Связано
- Восстановление headless Raspberry Pi через Mac
- systemd.mask в kernel cmdline — альтернатива через cmdline (одноразовый mask на один boot)
Мета
Область:: 00 Linux