Stop og genstart af Apache HTTP-server


Graceful Genstart

Signal: USR1 apachectl -k graceful

Signalet USR1 eller graceful får forældreprocessen til at råde børnene til at afslutte efter deres aktuelle anmodning (eller at afslutte med det samme, hvis de “serverer ikke noget). Forældrene genlæser sine konfigurationsfiler og genåbner sine logfiler. Efterhånden som hvert barn dør, erstatter forældren det med et barn fra den nye generation af konfigurationen, som straks begynder at servere nye anmodninger.

Denne kode er designet til altid at respektere MPMernes processtyringsdirektiv, så antallet af processer og tråde, der er tilgængelige for at betjene klienter, vil blive opretholdt på de passende værdier under hele genstartsprocessen. Desuden respekterer den StartServers på følgende måde: hvis efter et sekund mindst StartServers nye børn er ikke oprettet, og skab derefter nok til at afhente slakken. Derfor forsøger koden at opretholde både antallet af børn, der passer til den aktuelle belastning på serveren, og respektere dine ønsker med parameteren StartServers.

Brugere af mod_status bemærker, at serverstatistikken ikke er sat til nul, når en USR1 sendes. Koden blev skrevet for både at minimere den tid, hvor serveren ikke er i stand til at betjene nye anmodninger (de vil stå i kø i operativsystemet, så de går under ingen omstændigheder tabt) og respektere dine indstillingsparametre. For at gør dette, det skal holde resultattavlen brugt til at holde styr på alle børn på tværs af generationer.

Statusmodulet bruger også et G til at indikere de børn, der er stadig betjener anmodninger startet før den yndefulde genstart blev givet.

På nuværende tidspunkt er der ingen måde for et logrotationsscript ved hjælp af USR1 at vide med sikkerhed, at alle børn skriver loggen før genstart er afsluttet. Vi foreslår, at du bruger en passende forsinkelse, efter at du har sendt USR1 -signalet, før du gør noget med den gamle log. For eksempel hvis de fleste af dine hits tager mindre end 10 minutter at udføre for brugere på links med lav båndbredde, kan du vente 15 minutter, før du gør noget med den gamle log.

Når du udsteder en genstart, køres først en syntakscheck for at sikre, at der ikke er fejl i konfigurationsfilerne. Hvis din konfigurationsfil har fejl i den, får du en fejlmeddelelse om denne syntaksfejl, og serveren nægter at genstarte. Dette undgår situationen, hvor serveren stopper og derefter ikke kan genstarte, hvilket efterlader dig med en ikke-fungerende server.

Dette garanterer stadig ikke, at serveren genstarter korrekt. For at kontrollere semantikken i konfigurationsfilerne såvel som syntaksen kan du prøve at starte httpd som en ikke-root-bruger. Hvis der ikke er nogen fejl, forsøger den at åbne sine sokler og logfiler og mislykkes, fordi den ikke er rod (eller fordi den nuværende httpd allerede har disse porte bundet). af en hvilken som helst anden årsag, er det sandsynligvis en konfigurationsfilfejl, og fejlen skal rettes, inden den yndefulde genstart udstedes.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *