Apache HTTP-server stoppen en opnieuw starten
Snelle herstart
Signaal: USR1 apachectl -k graceful
Het signaal USR1
of graceful
zorgt ervoor dat het ouderproces de kinderen adviseert om af te sluiten na hun huidige verzoek (of om onmiddellijk af te sluiten als ze De ouder leest zijn configuratiebestanden opnieuw en opent zijn logbestanden opnieuw. Als elk kind sterft, vervangt de ouder het door een kind van de nieuwe generatie van de configuratie, die onmiddellijk nieuwe verzoeken begint te behandelen.
Deze code is ontworpen om altijd de procesbeheersingsrichtlijn van de MPMs te respecteren, dus het aantal processen en threads dat beschikbaar is om klanten van dienst te zijn, blijft op de juiste waarden tijdens het herstartproces. Bovendien respecteert het StartServers
op de volgende manier: als na minstens één seconde StartServers
er zijn geen nieuwe kinderen gemaakt, maak dan genoeg om de speling op te vangen. Daarom probeert de code zowel het aantal kinderen dat geschikt is voor de huidige belasting op de server te behouden, als uw wensen te respecteren met de parameter StartServers
.
Gebruikers van mod_status
zal opmerken dat de serverstatistieken niet op nul worden gezet wanneer een USR1
wordt verzonden. De code is geschreven om de tijd te minimaliseren waarin de server geen nieuwe verzoeken kan verwerken (ze worden in de wachtrij geplaatst door het besturingssysteem, zodat ze in geen geval verloren gaan) en om uw afstemmingsparameters te respecteren. dit moet het scorebord behouden dat wordt gebruikt om alle kinderen van generatie op generatie bij te houden.
De statusmodule zal ook een G
gebruiken om aan te geven welke kinderen die nog steeds verzoeken dienen die zijn gestart voordat de genadige herstart werd gegeven.
Momenteel is er geen manier waarop een logboekrotatiescript USR1
gebruikt om zeker te weten dat alle kinderen die schrijven het pre-herstartlogboek is voltooid. We raden u aan een geschikte vertraging te gebruiken na het verzenden van het USR1
-signaal voordat u iets doet met het oude logboek. Als de meeste van uw treffers bijvoorbeeld minder tijd kosten dan 10 minuten om te voltooien voor gebruikers met links met lage bandbreedte, dan zou u 15 minuten kunnen wachten voordat u iets met het oude logboek doet.
Wanneer u een herstart uitvoert, wordt eerst een syntaxiscontrole uitgevoerd om er zeker van te zijn dat er geen fouten in de configuratiebestanden zitten. Als uw configuratiebestand fouten bevat, krijgt u een foutmelding over die syntaxisfout en zal de server weigeren opnieuw op te starten. Dit vermijdt de situatie waarin de server stopt en vervolgens niet opnieuw kan opstarten, waardoor u een niet-functionerende server overhoudt.
Dit garandeert nog steeds niet dat de server correct herstart. Om de semantiek van de configuratiebestanden en de syntaxis te controleren, kunt u proberen httpd
te starten als een niet-rootgebruiker. Als er geen fouten zijn, zal het proberen zijn sockets en logboeken te openen, maar dit mislukt omdat het “geen root is (of omdat de momenteel actieve httpd
al die poorten heeft gebonden). om een andere reden is het waarschijnlijk een fout in het configuratiebestand en moet de fout worden verholpen voordat de herstart wordt uitgevoerd.