Jaka jest różnica między „ponownym uruchomieniem usługi” a „przeładowaniem usługi”

73

Próbuję zrozumieć różnicę między service restart [someservice]i service reload [someservice]. Rozumiem, że „restart” ponownie uruchamia usługę, podczas gdy „reload” ponownie ładuje konfigurację, ale nie rozumiem praktycznych implikacji tego na tyle dobrze, aby określić, którego powinienem użyć w danym kontekście.

Przykład: większość przewodników, które przeczytałem na temat konfigurowania PostgreSQL, mówi, że po edycji postgresql.conf i pg_hba.conf, aby umożliwić zdalne połączenia, powinienem wydać sudo service postgresql restart. Gdybym jednak zgadywał, którego użyć na podstawie powyższego opisu, wybrałbym „przeładuj”.

W razie potrzeby korzystam z Ubuntu 11.10 - choć mam nadzieję na możliwie ogólne wyjaśnienie.

nxzr
źródło
2
Kilka lat temu prowadziłem serwer z kilkoma tysiącami użytkowników. Ponowne uruchomienie Apache nie było szybkie z jakiegokolwiek powodu, ponowne uruchomienie Apache (przyczyny) zajęłoby około 3 minut. W każdym razie, jeśli serwer byłby wyłączony przez 3 minuty, mój szef otrzymałby około 800 połączeń telefonicznych. Po przeładowaniu usługi 0 połączeń telefonicznych. To różnica.
j0h

Odpowiedzi:

41

To, co powiedziałeś, jest poprawne, reloadkaże usłudze ponownie załadować pliki konfiguracyjne. Oznacza to, że powinno wystarczyć ponowne załadowanie konfiguracji; jednak mogą istnieć pewne usługi, które „nie przestrzegają reguły” lub nie będą ponownie ładować plików konfiguracyjnych. Z tego powodu prawdopodobnie jesteś bezpieczniejszy restart. Ja osobiście nie używam postgresql, więc nie wiem.

jman6495
źródło
1
Tymczasem jestreload-or-restart
Suuuehgi
W przypadku PostgreSQL możesz zastosować zmiany w pliku /etc/postgresql/version/main/postgresql.conf po przeładowaniu. Zastosowanie zmian w pg_hba.conf wymaga ponownego uruchomienia.
Aidan Melen
63
  • restart = stop + start
  • reload = pozostań uruchomiony + ponownie przeczytaj pliki konfiguracyjne.
Abdennour TOUMI
źródło
8

Nie wszystkie usługi obsługują reload. Dla tych, którzy tak robią, zwykle lepiej jest zrestartować komputer (tzn. Ponowne załadowanie powoduje mniej lub wcale nie ma przestojów).

Podręcznik zasad Debiana określa, że każdy /etc/init.d/skrypt powinien obsługiwać force-reloadakcję, co oznacza, reloadczy usługa obsługuje tę operację i restartjeśli usługa nie obsługuje przeładowywania.

Nie jestem pewien, jak to przekłada się na współczesny świat Ubuntu.

Marius Gedminas
źródło
1
Podręcznik Polityki Debiana był naprawdę przydatnym linkiem, dzięki.
nie łatka
1
większość wsparcia przeładowania, jeśli nie za pośrednictwem usługi systemowej, pomyślał /etc/init.d/SomeProgram reload
j0h
4

Aby rozwinąć عبد النور التومي, odpowiedz z moim doświadczeniem z systemd.

W systemd za każdym razem, gdy proces jest uruchamiany, jest uruchamiany w kontekście systemowym, najwyraźniejszym tego przykładem są zmienne środowiskowe zdefiniowane w pliku jednostkowym.

Więc kiedy wysyłasz systemctl reload [someservice]sygnał, wysyła sygnał do usługi, aby z wdziękiem przeładował się, jeśli jest obsługiwany. Jeśli nie, proces po prostu zignoruje sygnał. Można to jednak skonfigurować.

Co mam na myśli z wdziękiem? aby rozpocząć nowych pracowników z nową konfiguracją lub kodem i zatrzymać starych pracowników, gdy kończą obsługiwać bieżące żądania, jeśli takie istnieją.

A jeśli systemctl restart [someservice]go wykonasz, systemctl powie systemowi, aby zatrzymał usługę, zniszcz obecny kontekst systemowy, utwórz nowy i ponownie uruchom usługę. Ma to na przykład sens, aby przeładować zmienne środowiskowe w kontekście systemowym lub jeśli przeładowanie nie jest obsługiwane.

Mam nadzieję, że to trochę wyjaśni, a jeśli coś jest nie tak, daj mi znać.

Gaston Sanchez
źródło
0

obecnie, jeśli usługa wymaga wykopania (np. zmieniony plik konfiguracyjny), możesz powiadomić usługę, ale prowadzi to do ponownego uruchomienia. Byłoby miło, gdyby przeładowanie zostało wykonane, jeśli usługa była już uruchomiona (chociaż przypuszczam, że będą pewne usługi, które wymagają ponownego uruchomienia dla niektórych plików, przeładowania dla innych).

Najbardziej złożonym przykładem, jaki mogę wymyślić, jest coś w rodzaju Apache. Zwykle możesz po prostu poprosić go o ponowne załadowanie, jednak czasami musisz poprosić o ponowne uruchomienie (jeśli na przykład dodasz / usuniesz moduły).

One Zero
źródło
0

postgres jest dobrym przykładem dużych różnic między przeładowaniem a restartem, ponieważ później musi rozłączyć wszystkich klientów bazy danych.

gdy połączenia nie powinny być przywracane, możesz zatrzymać usługę bez „--force” na początku, używając pg_ctlcluster .

w /etc/postgres/{version}/{dbname}/postgresql.conf i na http://www.postgresql.org/docs/manuals/ każdego parametru ma uwagi w stylu „Ten parametr można ustawić tylko przy starcie serwera. „

maletyna
źródło