Stoppa och starta om Apache HTTP-server
Graciös omstart
Signal: USR1 apachectl -k graceful
Signalen USR1
eller graceful
får föräldraprocessen att rekommendera barnen att lämna efter deras nuvarande begäran (eller att lämna omedelbart om de ”serverar inte någonting). Föräldern läser igenom sina konfigurationsfiler och öppnar igen sina loggfiler. När varje barn dör av ersätter föräldern det med ett barn från den nya generationen av konfigurationen, som börjar servera nya förfrågningar omedelbart.
Den här koden är utformad för att alltid respektera MPM: s processstyrningsdirektiv, så antalet processer och trådar som är tillgängliga för att betjäna klienter kommer att bibehållas vid lämpliga värden under hela omstartsprocessen. Dessutom respekterar den StartServers
på följande sätt: om efter en sekund minst StartServers
nya barn har inte skapats, skapa sedan tillräckligt för att plocka upp slacken. Därför försöker koden att behålla både antalet barn som är lämpligt för den aktuella belastningen på servern och respektera dina önskemål med parametern StartServers
.
Användare av mod_status
kommer att märka att serverstatistiken inte är noll när en USR1
skickas. Koden skrevs för att både minimera den tid då servern inte kan betjäna nya förfrågningar (de kommer att placeras i kö i operativsystemet, så att de inte går förlorade under alla omständigheter) och för att respektera dina inställningsparametrar. gör detta måste den hålla resultattavlan för att hålla reda på alla barn i generationer.
Statusmodulen använder också en G
för att ange de barn som är fortfarande betjänar förfrågningar startade innan den eleganta omstarten gavs.
För närvarande finns det inget sätt för ett loggrotationsskript med USR1
att veta med säkerhet att alla barn skriver loggen före omstart har avslutats. Vi föreslår att du använder en lämplig fördröjning efter att ha skickat USR1
innan du gör något med den gamla loggen. Till exempel om de flesta av dina träffar tar mindre än 10 minuter att slutföra för användare på länkar med låg bandbredd kan du vänta i 15 minuter innan du gör något med den gamla loggen.
När du ger omstart körs en syntaxkontroll först för att säkerställa att det inte finns några fel i konfigurationsfilerna. Om det finns fel i din konfigurationsfil får du ett felmeddelande om det syntaxfelet och servern kommer att vägra att starta om. Detta undviker situationen där servern stoppas och sedan inte kan startas om, vilket ger dig en server som inte fungerar.
Detta garanterar fortfarande inte att servern startar om korrekt. För att kontrollera semantiken för konfigurationsfilerna och syntaxen kan du försöka starta httpd
som en icke-rotanvändare. Om det inte finns några fel kommer den att försöka öppna sina uttag och loggar och misslyckas eftersom den inte är root (eller eftersom den nuvarande httpd
redan har dessa portar bundna). Av någon annan anledning är det troligen ett konfigurationsfilfel och felet bör åtgärdas innan den eleganta omstarten utfärdas.