Rozwiązywanie problemu z błędem „Zadanie zatrzymania jest uruchomione” w systemie Linux podczas wyłączania

Rozwiązywanie problemu z błędem „Zadanie zatrzymania jest uruchomione” w systemie Linux podczas wyłączania

Czy podczas wyłączania systemu w dystrybucji Linuksa pojawia się komunikat „Zadanie zatrzymania jest uruchomione”? Nie jesteś sam. To powiadomienie często wstrzymuje proces wyłączania systemu nawet na 90 sekund, co wprawia wielu użytkowników w konsternację.

Zrozumienie funkcji bezpieczeństwa

Przede wszystkim należy pamiętać, że komunikat „Trwa wykonywanie zadania” stanowi wbudowaną funkcję bezpieczeństwa, a nie usterkę systemu.

Dystrybucje Linuksa, takie jak Ubuntu, Fedora i Arch, wykorzystują systemd do zarządzania sekwencjami uruchamiania i zamykania. Podczas inicjowania zamykania systemu, systemd nie odcina nagle zasilania, lecz wysyła sygnał SIGTERM do wszystkich aktywnych usług i aplikacji. W idealnym scenariuszu każdy program odbiera ten sygnał, umożliwiając im zapisanie danych i prawidłowe zamknięcie plików.

Jednak niektóre usługi mogą wymagać dodatkowego czasu na ukończenie swoich procesów i mogą nie reagować na sygnał natychmiast. To opóźnienie powoduje wyświetlenie komunikatu ostrzegawczego. Typowe przyczyny to:

  • Menedżerowie sieci
  • Usługi kontenerowe
  • Sesje użytkownika
  • Napędy sieciowe

Wielu użytkowników uważa komunikat „A Stop Job is Running” za objaw wadliwego systemu, ale takie zachowanie zostało celowo zaprojektowane przez programistów systemd. Zasadniczo 90-sekundowe oczekiwanie pozwala usługom na dokończenie zaległych zadań. Jeśli nie zostaną one ukończone w tym czasie, systemd wymusi ich zamknięcie za pomocą sygnału SIGKILL i rozpocznie proces wyłączania systemu.

To kontrolowane wyłączenie systemu zapewnia aplikacjom możliwość sfinalizowania operacji – od zamykania plików, przez dokończenie transakcji w bazie danych, po czyste odmontowanie systemów plików. Chociaż możliwe jest skrócenie tego czasu oczekiwania i przyspieszenie wyłączania systemu, wiąże się to z ryzykiem utraty lub uszkodzenia danych, co może zagrozić stabilności systemów plików.

Dostosowywanie domyślnego limitu czasu

Standardowy 90-sekundowy limit czasu często sprawdza się u użytkowników starszego sprzętu, ponieważ zaspokaja potrzeby czyszczenia większości usług. Jednak w przypadku nowszych systemów ten czas może wydawać się zbyt długi.

Na szczęście masz możliwość modyfikacji konfiguracji systemu i skrócenia czasu oczekiwania, aby przyspieszyć proces wyłączania. Możesz określić precyzyjny limit czasu dla oczekujących usług.

Na początek otwórz terminal i wykorzystaj swój ulubiony edytor tekstu, aby dostosować plik konfiguracji systemu:

sudo nano /etc/systemd/system.conf

Po otwarciu pliku wyszukaj zmienną timeout. Znajdziesz tam różne ustawienia globalne. Znajdź wiersz z napisem #DefaultTimeoutStopSec=90s. Obecność symbolu hash oznacza, że ​​jest on zakomentowany, co oznacza, że ​​system stosuje domyślne ustawienie 90 sekund.

Aby zmienić to ustawienie, usuń symbol hasha i zmień wartość na preferowany czas trwania.

Ważne: Ustawienie tej wartości na 0 powoduje nieokreślony limit czasu, co oznacza, że ​​system będzie się zawieszał w oczekiwaniu na zakończenie procesów. Rozsądny zakres od 20 do 30 sekund jest zazwyczaj odpowiednim kompromisem.

Po wprowadzeniu zmian zapisz je i wyjdź z edytora. Pamiętaj, że zazwyczaj wymagane jest ponowne uruchomienie komputera, aby zastosować te zmiany. Możesz ponownie doświadczyć długiego oczekiwania, ale kolejne uruchomienia odzwierciedlą nowe ustawienie limitu czasu.

Kiedy przekroczenie limitu czasu sygnalizuje problem

Generalnie, przekroczenie limitu czasu zadania zatrzymania jest zjawiskiem oczekiwanym. Jednak uporczywe opóźnienia mogą wskazywać na problemy, zwłaszcza jeśli ta sama usługa stale przedłuża czas wyłączania. Możliwe wyjaśnienia to niedostępne punkty montowania sieci, błędnie skonfigurowane demony lub brak reakcji usług na sygnały zatrzymania.

Jeśli zauważysz, że procesy wyłączania systemu trwają nietypowo długo – w minutach zamiast sekundach – warto zbadać te anomalie. O ile sporadyczne opóźnienia zazwyczaj nie mają znaczenia, o tyle częste opóźnienia mogą wymagać uwagi.

Aby zidentyfikować usługę powodującą spowolnienie, przejrzyj dzienniki po ponownym uruchomieniu komputera po dłuższym wyłączeniu:

journalctl -b -1 -e

To polecenie pobiera logi z poprzedniego rozruchu i przechodzi do końca. Możesz przewijać, aby znaleźć ostrzeżenia lub komunikaty o przekroczeniu limitu czasu związane z usługami, które zostały zatrzymane siłą.

Aby jeszcze bardziej zawęzić zakres wyszukiwania, możesz filtrować komunikaty ostrzegawcze, używając:

journalctl -b -1 -p warning

Dodatkowo możesz chcieć skorzystać z następującego polecenia systemd:

systemd-analyze blame

Chociaż to polecenie zazwyczaj koncentruje się na czasie rozruchu, powolne usługi podczas uruchamiania często zachowują się podobnie podczas zamykania. Typowe usługi, które mogą generować powiadomienia o zatrzymaniu zadania, to:

  • Usługi sieciowe
  • Zdalne systemy plików, takie jak NFS lub SMB
  • Serwery baz danych
  • Menedżerowie maszyn wirtualnych i kontenerów
  • Dyski zewnętrzne i usługi automatycznego montowania

Usługi zależne od montowań sieciowych są szczególnie narażone na opóźnienia w przypadku utraty łączności. Chociaż skrócenie czasu oczekiwania na wyłączenie może przyspieszyć awarie, nie rozwiązuje to problemów z usługami powodującymi opóźnienia. Usunięcie przyczyn źródłowych oferuje bardziej zrównoważone rozwiązanie.

Wniosek

Linux oferuje użytkownikom znaczną kontrolę nad systemami, w tym możliwość zarządzania czasem zamykania opornych usług. Optymalizując aplikacje działające w tle i wyłączając zbędne usługi, można zwiększyć wydajność zarówno zamykania, jak i uruchamiania systemu.

Źródło i obrazy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *