Stoppe og starte Apache HTTP-server på nytt
Grasiøs omstart
Signal: USR1 apachectl -k graceful
Signalet USR1
eller graceful
får foreldreprosessen til å råde barna til å avslutte etter deres nåværende forespørsel (eller gå ut umiddelbart hvis de «serverer ikke noe). Forelderen leser konfigurasjonsfilene sine på nytt og åpner loggfilene på nytt. Når hvert barn dør, erstatter foreldrene det med et barn fra den nye generasjonen av konfigurasjonen, som begynner å servere nye forespørsler umiddelbart.
Denne koden er designet for alltid å respektere prosessstyringsdirektivet til MPM-ene, slik at antall prosesser og tråder som er tilgjengelige for å betjene klienter, vil bli opprettholdt på de riktige verdiene gjennom omstartsprosessen. Videre respekterer den StartServers
på følgende måte: hvis minst ett sekund etter StartServers
nye barn har ikke blitt opprettet, så lag nok til å plukke opp slakken. Derfor prøver koden å opprettholde både antall barn som er passende for den aktuelle belastningen på serveren, og respektere dine ønsker med parameteren StartServers
.
Brukere av mod_status
vil legge merke til at serverstatistikken ikke er satt til null når en USR1
sendes. Koden ble skrevet for både å minimere tiden serveren ikke klarer å betjene nye forespørsler (de vil stå i kø av operativsystemet, slik at de i alle fall ikke går tapt) og for å respektere innstillingsparametrene dine. gjør dette for å holde resultattavlen brukt til å holde oversikt over alle barn på tvers av generasjoner.
Statusmodulen vil også bruke en G
for å indikere de barna som er fremdeles serveringsforespørsler startet før den grasiøse omstart ble gitt.
For tiden er det ingen måte for et loggrotasjonsskript som bruker USR1
, for å vite sikkert at alle barn som skriver loggen før omstart er ferdig. Vi foreslår at du bruker en passende forsinkelse etter å ha sendt USR1
-signalet før du gjør noe med den gamle loggen. For eksempel hvis de fleste av dine treff tar mindre enn 10 minutter å fullføre for brukere på lenker med lav båndbredde, kan du vente i 15 minutter før du gjør noe med den gamle loggen.
Når du utsteder en omstart, kjøres først en syntakskontroll for å sikre at det ikke er noen feil i konfigurasjonsfilene. Hvis konfigurasjonsfilen din inneholder feil, vil du få en feilmelding om den syntaksfeilen, og serveren vil nekte å starte på nytt. Dette unngår situasjonen der serveren stopper og deretter ikke kan starte på nytt, og etterlater deg med en ikke-fungerende server.
Dette vil fortsatt ikke garantere at serveren starter på nytt. For å kontrollere semantikken til konfigurasjonsfilene så vel som syntaksen, kan du prøve å starte httpd
som en ikke-rotbruker. Hvis det ikke er noen feil, vil den prøve å åpne stikkontaktene og loggene og mislykkes fordi den ikke er root (eller fordi den nåværende httpd
allerede har disse portene bundet). Hvis den mislykkes av en annen grunn, er det sannsynligvis en konfigurasjonsfilfeil, og feilen bør rettes før den elegante omstart utstedes.