Отключить все сервисы, кроме 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-имена.

Затем создайте список и остановите каждого участника списка для ввода обслуживания, запустите каждого участника после обслуживания.

Другие вопросы по тегам