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


31

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

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

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

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

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

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


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-имена.

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


5
Почему бы просто не использовать systemctl isolate?
Крис Даун
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.