it-swarm-eu.dev

Jaký je rozdíl mezi „restartem služby“ a „opětovným načtením služby“

Snažím se pochopit rozdíl mezi service restart [someservice] a service reload [someservice]. Chápu, že "restart" restartuje službu, zatímco "reload" znovu načte konfiguraci, ale nerozumím praktickým důsledkům tohoto dostatečně dobře, abych určil, které bych měl použít v daném kontextu.

Příklad: většina průvodců, které jsem četl pro nastavení PostgreSQL, říká, že jakmile upravím postgresql.conf a pg_hba.conf, aby umožňoval vzdálená připojení, měl bych vydat Sudo service postgresql restart. Kdybych však hádal, které použít na základě výše uvedeného popisu, vybral bych „znovu načíst“.

V případě, že na tom záleží, jsem na Ubuntu 11.10 - i když doufám, že obecně platné vysvětlení je to možné.

77
nxzr

To, co jste řekli, je správné, reload říká službě, aby znovu načítala své konfigurační soubory. To znamená, že by mělo stačit znovu načíst konfiguraci; Mohou však existovat určité služby, které „nedodržují pravidlo“ nebo které nebudou znovu načítat konfigurační soubory. Z tohoto důvodu jste pravděpodobně bezpečnější s restart. Já osobně nepoužívám postgresql, takže nevím.

43
jman6495
  • restart = stop + start
  • reload = zůstávají spuštěny + znovu načteny konfigurační soubory.
64
Abdennour TOUMI

Ne všechny služby podporují reload. Pro ty, kteří tak dělají, je obvykle výhodnější restartovat (tj. Opětovné načtení způsobí méně nebo žádné prostoje).

Debian Policy Manual uvádí že každý /etc/init.d/ skript by měl podporovat force-reload akce, což znamená reload, pokud ji služba podporuje, a restart, pokud služba nepodporuje opětovné načtení.

Nejsem si jistý, jak se to promítá do moderního světa upgradu Ubuntu.

8
Marius Gedminas

Chcete-li rozšířit عبد النور التومي odpověď na mé zkušenosti s systemd.

V systemd při každém spuštění procesu je spuštěn v kontextu systemd, nejjasnějším příkladem je proměnná prostředí definovaná v souboru jednotky.

Když tedy pošlete systemctl reload [someservice] signál vyšle signál do služby, aby se sám znovu načerpal, pokud je podporován. Pokud tomu tak není, proces jednoduše signál ignoruje. To je však konfigurovatelné.

Co myslím s půvabně? zahájit nové pracovníky s novou konfigurací nebo kódem a zastavit staré pracovníky, když dokončují podávání aktuálních požadavků, pokud existují.

A pokud uděláte systemctl restart [someservice] řekne systemctl, aby řekl službě, aby zastavila, zničila aktuální kontext systému, vytvořila nový a znovu spustila službu. To má smysl například znovu načíst proměnné prostředí v kontextu systému nebo pokud není podporováno opětovné načtení.

Doufám, že to trochu objasní, a pokud se v něčem nemýlím, dejte mi prosím vědět.

4
Gaston Sanchez

Signal detail může být důležitý pro opětovné načtení.
Většinou se jedná o zaslání správného signálu (SIGHUP) do servisního procesu. Pokud má podkladová aplikace nějakou strategii „opětovného použití živé konfigurace“, pak by pravděpodobně měl být v souboru servisní jednotky řádek začínající „ExecReload =“. Což znamená, že reload je volitelný a je třeba zkontrolovat, zda aplikace implementuje reload: (docker, tj.)

cat $(echo $(systemctl show -p FragmentPath docker) | cut -d "=" -f 2)

Restart je pouze stop-start. Systemd potřebuje vědět pouze správný příkaz "ExecStart".

1
stratovarius

postgres je dobrým příkladem velkých rozdílů mezi opětovným načtením a restartem, protože později musí odpojit všechny klienty databáze.

když by se připojení neměla vrátit zpět, můžete zastavit službu bez "--force" nejprve pomocí pg_ctlcluster .

v /etc/postgres/{version}/{dbname} /postgresql.conf a na http://www.postgresql.org/docs/manuals / každý parametr má poznámku jako „Tento parametr lze nastavit pouze při spuštění serveru.“

0
maletin

aktuálně, pokud služba potřebuje kopat (např. změněný konfigurační soubor), můžete to oznámit službě, ale to vede k restartu. Bylo by hezké, kdyby bylo opětovné načtení provedeno, pokud služba již byla spuštěna (i když předpokládám, že existují určité služby, které vyžadují restartování některých souborů, opětovné načtení pro jiné).

Nejsložitějším příkladem je něco jako Apache. Normálně můžete požádat o opětovné načtení, ale někdy musíte místo toho požádat o restart (pokud například přidáte/odeberete moduly).

0
One Zero