Wyłącz wszystkie usługi oprócz ssh

31

Jak mogę wyłączyć wszystkie usługi oprócz ssh w nowoczesnych (opartych na systemie) dystrybucjach linuksa?

Muszę wdrożyć tryb konserwacji .

Wszystkie te usługi muszą zostać wyłączone:

  • postgres
  • postfiks
  • apacz
  • kubki
  • cron
  • gołębnik

Ale ssh nie może zostać zamknięty, ponieważ przyzwyczaja się do wykonywania zadań w trybie konserwacji.

Oczywiście mógłbym napisać skrypt powłoki, który zapętla listę usług, które chciałbym wyłączyć. Ale wydaje mi się, że odkrywam coś, co już istnieje, ale do tej pory nie wiem.

guettli
źródło
1
Jakie rodzaje zadań? Dlaczego tego potrzebujesz?
ewwhite
@ user430214 Zaktualizowałem pytanie. Dodałem: Oczywiście, że mogę napisać skrypt powłoki, który zapętla listę usług, które chciałbym wyłączyć. Ale wydaje mi się, że odkrywam coś, co już istnieje, ale do tej pory nie wiem.
guettli,

Odpowiedzi:

55

To brzmi jak poziomy pracy , zastąpione celami w Systemd. Zamiast pisać skrypt uruchamiający i zatrzymujący listę usług, możesz utworzyć nowy maintenance.targetzawierający tylko niezbędne usługi, takie jak SSH. Oczywiście, SSH nie jest całkiem użyteczne bez pracy w sieci, więc w tym przykładzie emergency-net.targetmodyfikacja prostej obejmuje 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

Następnie możesz przejść do trybu konserwacji za pomocą

# systemctl isolate maintenance.target

i z powrotem

# systemctl isolate multi-user.target
Esa Jokinen
źródło
1
Dziękuję bardzo za tę odpowiedź. Pokazuje mi, że pytanie jest przydatne, nawet jeśli uważasz, że nie ma dobrej odpowiedzi poza napisaniem brudnego skryptu powłoki. Emergency-net.target to proste i eleganckie rozwiązanie - świetne :-)
guettli
Z pewnością jest tak, ponieważ zajmuje się także wszystkimi zależnościami i nie trzeba aktualizować skryptu za każdym razem, gdy instalujesz nową usługę.
Esa Jokinen
3

Najpierw wypisz swoje usługi i wyszukaj odpowiadające im nazwy systemowe.

Następnie zbuduj listę i zatrzymaj każdego członka listy, aby przejść do konserwacji, uruchom każdego członka po konserwacji.

Nils
źródło
5
Dlaczego nie po prostu użyć systemctl isolate?
Chris Down,