Как я могу отключить все службы, кроме ssh, в современных дистрибутивах Linux (на основе systemd)?
Мне нужно реализовать Режим технического обслуживания.
Все эти службы должны быть отключены:
Но ssh нельзя выключать, так как он используется для выполнения задач в режиме обслуживания.
Конечно, я мог бы написать сценарий оболочки, который перебирает список служб, которые я хотел бы отключить. Но мне кажется, что я заново изобретаю что-то, что уже существует, но чего я не знаю до сих пор.
Это очень похоже на уровни выполнения, заменено на цели в Systemd. Итак, вместо написания сценария, запускающего и останавливающего список служб, вы можете создать новый maintenance.target
содержащие только необходимые сервисы, такие как SSH. Конечно, SSH не очень полезен без сети, поэтому в этом примере простой emergency-net.target
модифицирован для включения SSH.
[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes
Затем вы можете войти в режим обслуживания, используя
# systemctl isolate maintenance.target
и назад
# systemctl isolate multi-user.target
Сначала перечислите свои службы и найдите их соответствующие имена systemd.
Затем создайте список и остановите каждого члена списка, чтобы перейти к обслуживанию, запустите каждого члена после обслуживания.