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.
server
services
postgresql
nxzr
źródło
źródło
Odpowiedzi:
To, co powiedziałeś, jest poprawne,
reload
każ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ś bezpieczniejszyrestart
. Ja osobiście nie używampostgresql
, więc nie wiem.źródło
reload-or-restart
źródło
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-reload
akcję, co oznacza,reload
czy usługa obsługuje tę operację irestart
jeśli usługa nie obsługuje przeładowywania.Nie jestem pewien, jak to przekłada się na współczesny świat Ubuntu.
źródło
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ć.
źródło
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).
źródło
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. „
źródło