Отключить все сервисы, кроме ssh
Как я могу отключить все службы, кроме ssh, в современных (на основе systemd) дистрибутивах Linux?
Мне нужно реализовать режим обслуживания.
Все эти сервисы должны быть отключены:
- Postgres
- постфикс
- апаш
- чашки
- хрон
- голубятня
Но ssh не должен быть выключен, поскольку он используется для выполнения задач в режиме обслуживания.
Конечно, я мог бы написать сценарий оболочки, который перебирает список служб, которые я хотел бы отключить. Но кажется, что я заново изобретаю то, что уже существует, но чего я не знаю до сих пор.
3 ответа
Это очень похоже на уровни выполнения, замененные целями в 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
Судя по превосходному ответу @Esa , в Debian 10 у вас есть файлrescue-ssh.target
чтобы отключить все службы, кроме ssh и сети:
/lib/systemd/system/rescue-ssh.target
[Unit]
Description=Rescue with network and ssh
Documentation=man:systemd.special(7)
Requires=network-online.target ssh.service
After=network-online.target ssh.service
AllowIsolate=yes
Итак, теперь вы можете действовать следующим образом:
1. Войдите в режим обслуживания :
systemctl isolate rescue-ssh.target
(только ssh и сеть)
2. Проверьте режим обслуживания :
lsof -i:1-65535
(и вы увидите только работающий порт ssh)
3. Выход из режима обслуживания :
systemctl isolate multi-user.target
(и все возвращается снова)
Сначала перечислите свои сервисы и найдите их соответствующие systemd-имена.
Затем создайте список и остановите каждого участника списка для ввода обслуживания, запустите каждого участника после обслуживания.