home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 November / PCWorld_2003-11_cd.bin / Komunik / apache / apache_2.0.47-win32-x86-no_ssl.msi / Data.Cab / F250689_stopping.xml.de < prev    next >
Extensible Markup Language  |  2003-04-23  |  12KB  |  230 lines

  1. <?xml version='1.0' encoding='UTF-8' ?>
  2. <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
  3. <?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
  4. <!-- English revision: 1.2.2.6 -->
  5. <manualpage metafile="stopping.xml.meta">
  6.  
  7.   <title>Beenden und Neustarten</title>
  8.  
  9. <summary>
  10.     <p>Dieses Dokument umfasst das Beenden und Neustarten des
  11.     Apache auf Unix-ähnlichen Systemen. Anwender von Windows NT, 2000
  12.     und XP sollten <a href="platform/windows.html#winsvc">Betreiben
  13.     des Apache als Dienst</a> lesen, während hingegen Anwender von
  14.     Windows 9x sowie ME <a href="platform/windows.html#wincons">Betreiben
  15.     des Apache als Konsolenanwendung</a> lesen sollten, um mehr Informationen
  16.     zur Handhabung des Apache auf diesen Systemen zu erhalten.</p>
  17. </summary>
  18.  
  19. <seealso><a href="programs/httpd.html">httpd</a></seealso>
  20. <seealso><a href="programs/apachectl.html">apachectl</a></seealso>
  21.  
  22. <section id="introduction"><title>Einleitung</title>
  23.  
  24.     <p>Um den Apache zu stoppen oder neu zu starten, müssen Sie
  25.     ein Signal an den laufenden <code>httpd</code>-Prozess senden. Es gibt
  26.     zwei Möglichkeiten, diese Signale zu senden. Zum einen können
  27.     Sie den Unix-Befehl <code>kill</code> verwenden, um den Prozessen
  28.     direkt Signale zu senden. Sie werden feststellen, dass auf Ihrem
  29.     System mehrere <code>httpd</code>-Programme laufen. Sie sollten jedoch
  30.     nicht jedem dieser Prozesse ein Signal senden, sondern nur dem
  31.     Elternprozess, dessen PID im <directive
  32.     module="mpm_common">PidFile</directive> steht. Das heißt, Sie
  33.     sollten es niemals nötig haben, einem anderen Prozess, als dem
  34.     Elternprozess, ein Signal zu senden. Es gibt drei Signale, die Sie an den
  35.     Elternprozess senden können: <code><a href="#term">TERM</a></code>,
  36.     <code><a href="#hup">HUP</a></code> und
  37.     <code><a href="#graceful">USR1</a></code>, die nachfolgend beschrieben
  38.     werden.</p>
  39.  
  40.     <p>Um dem Elternprozess ein Signal zu senden, verwenden Sie einen
  41.     Befehl wie z.B.:</p>
  42.  
  43.     <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
  44.  
  45.     <p>Die zweite Methode, dem <code>httpd</code>-Prozess zu signalisieren,
  46.     ist die Verwendung der <code>-k</code>-Befehlszeilenoptionen
  47.     <code>stop</code>, <code>restart</code> und <code>graceful</code>, wie
  48.     unten beschrieben. Dies sind Argumente des <a
  49.     href="programs/httpd.html">httpd</a>-Programms, es wird jedoch
  50.     empfohlen, sie unter Verwendung des Steuerskripts <a
  51.     href="programs/apachectl.html">apachectl</a> zu senden, welches diese
  52.     an <code>httpd</code> durchreicht.</p>
  53.  
  54.     <p>Nachdem Sie <code>httpd</code> signalisiert haben, können Sie
  55.     dessen Fortschritt beobachten, indem Sie eingeben:</p>
  56.  
  57.     <example>tail -f /usr/local/apache2/logs/error_log</example>
  58.  
  59.     <p>Passen Sie diese Beispiele entsprechend Ihren <directive
  60.     module="core">ServerRoot</directive>- und <directive
  61.     module="mpm_common">PidFile</directive>-Einstellungen an.</p>
  62. </section>
  63.  
  64. <section id="term"><title>Beenden</title>
  65.  
  66.     <dl><dt>Signal: TERM</dt>
  67.       <dd><code>apachectl -k stop</code></dd>
  68.     </dl>
  69.  
  70.     <p>Das Senden des <code>TERM</code>- oder <code>stop</code>-Signals an
  71.     den Elternprozess veranlasst diesen, sofort zu versuchen, alle seine
  72.     Kindprozesse zu beenden. Es kann einige Sekunden dauern, bis alle
  73.     Kindprozesse komplett beendet sind. Danach beendet sich der Elternprozess
  74.     selbst. Alle gerade bearbeiteten Anfragen werden abgebrochen.
  75.     Es werden keine weiteren Anfragen mehr bedient.</p>
  76. </section>
  77.  
  78. <section id="graceful"><title>Unterbrechungsfreier Neustart</title>
  79.  
  80.     <dl><dt>Signal: USR1</dt>
  81.       <dd><code>apachectl -k graceful</code></dd>
  82.     </dl>
  83.  
  84.     <p>Das <code>USR1</code>- oder <code>graceful</code>-Signal
  85.     veranlasst den Elternprozess, die Kinder <em>anzuweisen</em>, sich
  86.     nach Abschluß ihrer momentanen bearbeiteten Anfrage zu beenden
  87.     (oder sich sofort zu beenden, wenn sie gerade keine Anfrage bedienen).
  88.     Der Elternprozess liest seine Konfigurationsdateien erneut ein und
  89.     öffnet seine Logdateien neu. Wenn ein Kindprozess stirbt,
  90.     ersetzt der Elternprozess ihn durch ein Kind der neuen
  91.     Konfigurations-<em>Generation</em>. Dieses beginnt sofort damit,
  92.     neue Anfragen zu bedienen.</p>
  93.  
  94.     <note>Auf bestimmten Plattformen, welche kein <code>USR1</code>
  95.     für einen unterbrechungsfreien Neustart erlauben, kann ein
  96.     alternatives Signal verwendet werden (wie z.B.
  97.     <code>WINCH</code>). Der Befehl <code>apachectl graceful</code>
  98.     sendet das jeweils richtige Signal für Ihre Platform.</note>
  99.  
  100.     <p>Der Code ist dafür ausgelegt, stets die MPM-Direktiven
  101.     zur Prozesssteuerung zu beachten, so dass die Anzahl der Prozesse
  102.     und Threads, die zur Bedienung der Clients bereitstehen, während
  103.     des Neustarts auf die entsprechenden Werte gesetzt werden.
  104.     Weiterhin wird <directive module="mpm_common">StartServers</directive>
  105.     auf folgende Art und Weise interpretiert: Wenn nach einer Sekunde
  106.     nicht mindestens <directive module="mpm_common">StartServers</directive>
  107.     neue Kindprozesse erstellt wurden, dann werden, um den Durchsatz zu
  108.     beschleunigen, entsprechend weitere erstellt. Auf diese Weise versucht
  109.     der Code sowohl die Anzahl der Kinder entsprechend der Serverlast
  110.     anzupassen als auch Ihre Wünsche hinsichtlich des Parameters
  111.     <directive>StartServers</directive> zu berücksichtigen.</p>
  112.  
  113.     <p>Benutzer von <module>mod_status</module> werden feststellen,
  114.     dass die Serverstatistiken <strong>nicht</strong> auf Null
  115.     zurückgesetzt werden, wenn ein <code>USR1</code> gesendet
  116.     wurde. Der Code wurde so geschrieben, dass sowohl die Zeit minimiert
  117.     wird, in der der Server nicht in der Lage ist, neue Anfragen zu
  118.     bedienen (diese werden vom Betriebssystem in eine Warteschlange
  119.     gestellt, so dass sie auf keinen Fall verloren gehen) als auch
  120.     Ihre Parameter zur Feinabstimmung berücksichtigt werden.
  121.     Um dies zu erreichen, muss die <em>Statustabelle</em> (Scoreboard),
  122.     die dazu verwendet wird, alle Kinder über mehrere Generationen
  123.     zu verfolgen, erhalten bleiben.</p>
  124.  
  125.     <p>Das Statusmodul benutzt außerdem ein <code>G</code>, um
  126.     diejenigen Kinder zu kennzeichen, die noch immer Anfragen bedienen,
  127.     welche gestartet wurden, bevor ein unterbrechungsfreier Neustart
  128.     veranlaßt wurde.</p>
  129.  
  130.     <p>Derzeit gibt es keine Möglichkeit für ein
  131.     Log-Rotationsskript, das <code>USR1</code> verwendet, sicher
  132.     festzustellen, dass alle Kinder, die in ein vor dem Neustart
  133.     geöffnetes Log schreiben, beendet sind. Wir schlagen vor, dass
  134.     Sie nach dem Senden des Signals <code>USR1</code> eine angemessene
  135.     Zeitspanne warten, bevor Sie das alte Log anfassen. Wenn beispielsweise
  136.     die meisten Ihrer Zugriffe bei Benutzern mit niedriger Bandbreite
  137.     weniger als 10 Minuten für eine vollständige Antwort
  138.     benötigen, dann könnten Sie 15 Minuten warten, bevor Sie auf
  139.     das alte Log zugreifen.</p>
  140.  
  141.     <note>Wenn Ihre Konfigurationsdatei Fehler enthält, während
  142.     Sie einen Neustart anweisen, dann wird Ihr Elternprozess nicht neu starten,
  143.     sondern sich mit einem Fehler beenden. Im Falle eines unterbrechungsfreien
  144.     Neustarts läßt er die Kinder weiterlaufen, wenn er sich beendet.
  145.     (Dies sind die Kinder, die sich "sanft beenden", indem sie ihre letzte
  146.     Anfrage erledigen.) Das verursacht Probleme, wenn Sie versuchen,
  147.     den Server neu zu starten -- er ist nicht in der Lage, sich an die Ports zu
  148.     binden, an denen er lauschen soll. Bevor Sie einen Neustart
  149.     durchführen, können Sie die Syntax der Konfigurationsdateien
  150.     mit dem Befehlszeilenargument <code>-t</code> überprüfen
  151.     (siehe auch <a href="programs/httpd.html">httpd</a>). Das garantiert
  152.     allerdings nicht, dass der Server korrekt starten wird. Um sowohl die
  153.     Syntax als auch die Semantik der Konfigurationsdateien zu prüfen,
  154.     können Sie versuchen, <code>httpd</code> als nicht-root-Benutzer
  155.     zu starten. Wenn dabei keine Fehler auftreten, wird er versuchen, seine
  156.     Sockets und Logdateien zu öffnen und fehlschlagen, da er nicht root
  157.     ist (oder weil sich der gegenwärtig laufende <code>httpd</code>
  158.     bereits diese Ports gebunden hat). Wenn er aus einem anderen Grund
  159.     fehlschlägt, dann liegt wahrscheinlich ein Konfigurationsfehler vor.
  160.     Der Fehler sollte behoben werden, bevor der unterbrechungsfreie Neustart
  161.     angewiesen wird.</note>
  162. </section>
  163.  
  164. <section id="hup"><title>Neustarten</title>
  165.  
  166.     <dl><dt>Signal: HUP</dt>
  167.       <dd><code>apachectl -k restart</code></dd>
  168.     </dl>
  169.  
  170.     <p>Das Senden des Signals <code>HUP</code> oder <code>restart</code>
  171.     veranlaßt den Elternprozess, wie bei <code>TERM</code> alle seine
  172.     Kinder zu beenden. Der Elternprozess beendet sich jedoch nicht. Er liest
  173.     seine Konfigurationsdateien neu ein und öffnet alle Logdateien
  174.     erneut. Dann erzeugt er einen neuen Satz Kindprozesse und setzt die
  175.     Bedienung von Zugriffen fort.</p>
  176.  
  177.     <p>Benutzer von <module>mod_status</module> werden feststellen, dass
  178.     die Serverstatistiken auf Null gesetzt werden, wenn ein <code>HUP</code>
  179.     gesendet wurde.</p>
  180.  
  181.     <note>Wenn Ihre Konfigurationsdatei einen Fehler enthält,
  182.     während Sie einen Neustart anweisen, dann wird Ihr Elternprozess
  183.     nicht neu starten, sondern sich mit einem Fehler beenden. Lesen Sie oben,
  184.     wie Sie das vermeiden können.</note>
  185. </section>
  186.  
  187. <section id="race"><title>Anhang: Signale und Wettkampfsituationen</title>
  188.  
  189.     <p>Vor der Version 1.2b9 des Apache existierten verschiedene
  190.     <em>Wettkampfsituationen</em> (race conditions), die den Neustart und
  191.     die Signale beeinflußt haben. (Eine einfache Beschreibung einer
  192.     Wettkampfsituation lautet: es ist ein zeitabhängiges Problem; wenn
  193.     etwas zum falschen Zeitpunkt erfolgt, wird es sich nicht wie erwartet
  194.     verhalten.) Bei Architekturen mit dem "richtigen" Funktionsumfang
  195.     haben wir so viele eliminiert wie wir nur konnten. Dennoch
  196.     sollte beachtet werden, dass noch immer Wettkampfsituationen auf
  197.     bestimmten Architekturen existieren.</p>
  198.  
  199.     <p>Bei Architekturen, die ein <directive
  200.     module="mpm_common">ScoreBoardFile</directive> auf Platte verwenden,
  201.     besteht die Gefahr, dass die Statustabelle beschädigt wird.
  202.     Das kann zu "bind: Address already in use" ("bind: Adresse wird
  203.     bereits verwendet", nach einem <code>HUP</code>) oder "long lost
  204.     child came home!" ("Der verlorene Sohn ist heimgekehrt", nach einem
  205.     <code>USR1</code>) führen. Ersteres ist ein schwerer Fehler,
  206.     wärend letzteres lediglich bewirkt, dass der Server einen Eintrag
  207.     in der Statustabelle verliert. So kann es ratsam sein, unterbrechungsfreie
  208.     Neustarts zusammen mit einem gelegentlichen harten Neustart zu verwenden.
  209.     Diese Probleme lassen sich nur sehr schwer umgehen, aber
  210.     glücklicherweise benötigen die meisten Architekturen keine
  211.     Statustabelle in Form einer Datei. Bitte lesen Sie für Architekturen,
  212.     die sie benötigen, die Dokumentation zu <directive
  213.     module="mpm_common">ScoreBoardFile</directive>.</p>
  214.  
  215.     <p>Alle Architekturen haben in jedem Kindprozess eine kleine
  216.     Wettkampfsituation, welche die zweite und nachfolgende Anfragen
  217.     einer persistenten HTTP-Verbindung (KeepAlive) umfaßt. Der Prozess
  218.     kann nach dem Lesen der Anfragezeile aber vor dem Lesen der Anfrage-Header
  219.     enden. Es existiert eine Korrektur, die für 1.2 zu spät kam.
  220.     Theoretisch sollte das kein Problem darstellen, da
  221.     der KeepAlive-Client derartige Ereignisse aufgrund von
  222.     Netzwerk-Latenzzeiten und Auszeiten des Servers erwarten sollte.
  223.     In der Praxis scheint keiner von beiden beeinflußt zu werden
  224.     -- in einem Testfall wurde der Server zwanzig mal
  225.     pro Sekunde neu gestartet, während Clients das Angebot abgegrast
  226.     haben, ohne kaputte Bilder oder leere Dokumente zu erhalten.</p>
  227. </section>
  228.  
  229. </manualpage>
  230.