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.


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

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.


5
Dlaczego nie po prostu użyć systemctl isolate?
Chris Down,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.