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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *