Отключить все сервисы, кроме ssh

31

Как я могу отключить все службы, кроме ssh, в современных (на основе systemd) дистрибутивах Linux?

Мне нужно реализовать режим обслуживания .

Все эти сервисы должны быть отключены:

  • Postgres
  • постфикс
  • апаш
  • чашки
  • хрон
  • голубятня

Но ssh не должен быть выключен, поскольку он используется для выполнения задач в режиме обслуживания.

Конечно, я мог бы написать сценарий оболочки, который перебирает список служб, которые я хотел бы отключить. Но похоже, что я заново изобретаю то, что уже существует, но чего я не знаю до сих пор.

guettli
источник
1
Какой тип задач? зачем вам это?
ewwhite
@ user430214 Я обновил вопрос. Я добавил: Конечно, я мог бы написать сценарий оболочки, который перебирает список служб, которые я хотел бы отключить. Но похоже, что я заново изобретаю то, что уже существует, но чего я не знаю до сих пор.
Геттли

Ответы:

55

Это очень похоже на уровни выполнения , замененные целями в 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
Эса Йокинен
источник
1
Большое спасибо за этот ответ. Это показывает мне, что спрашивать полезно, даже если вы думаете, что нет хорошего ответа, кроме написания грязного сценария оболочки. Emergency-net.target - это простое и элегантное решение - отлично :-)
guettli
Это, безусловно, так как он также заботится обо всех зависимостях, и вам не нужно обновлять ваш скрипт каждый раз, когда вы устанавливаете новую службу.
Эса Йокинен
3

Сначала перечислите свои сервисы и найдите их соответствующие systemd-имена.

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

Nils
источник
5
Почему бы просто не использовать systemctl isolate?
Крис Даун