# ISP Config Crash nach Graceful Restart



## bts_freak (22. März 2010)

Erstmal wollte ich mich mich für das tolle Forum und die Arbeit der  Admins und Mitarbeiter bedanken, ich ahbe hier echt tolle Informationen  und Hilfestellungen gefunden.

Ich betreibe ISPConfig 3.0.1.6 auf  eienr Ubuntu 9.10 VM mit Apache 2.2.12.

Nach einer Weile des Betriebs blieb die GUI nach Änderung einiger  Werte einfach hängen und funktionierte nicht mehr.
Nach dem Überprüfen der Apache Logs kamen traten diese Zeilen im Error  Log zu Tage:


```
Graceful restart requested, doing restart
[Mon  Mar 22 08:30:02 2010] [notice] seg fault or similar nasty error  detected in the parent process
[Mon Mar 22 08:30:02 2010] [error]  (9)Bad file descriptor: apr_socket_accept: (client socket)
```
Also  hab ich rumprobiert, den Apache gestartet und gestoppt. Es scheint,  dass auch noch dem apache2 stop Kommando noch immer ein Prozess des  Apaches weiterläuft, was dann beim Graceful Restart den Start  verhindert. Der Apache bleibt dann einfach tot (aus).

netstat -nlp liefert:

```
tcp        0      0 0.0.0.0:25               0.0.0.0:*               LISTEN      1823/master
tcp        0      0  127.0.0.1:10024         0.0.0.0:*               LISTEN      960/amavisd  (master
tcp        0      0 127.0.0.1:10025          0.0.0.0:*               LISTEN      1823/master
tcp        0      0  0.0.0.0:3306            0.0.0.0:*               LISTEN      1102/mysqld
tcp         0      0 127.0.0.1:783           0.0.0.0:*               LISTEN       1166/spamd.pid
tcp        0      0 0.0.0.0:21               0.0.0.0:*               LISTEN      1836/pure-ftpd (SER
tcp         0      0 78.46.99.253:53         0.0.0.0:*               LISTEN       1735/mydns
tcp        0      0 127.0.0.1:53             0.0.0.0:*               LISTEN      1735/mydns
tcp        0      0  0.0.0.0:22              0.0.0.0:*               LISTEN      943/sshd
tcp6        0      0 :::25                   :::*                    LISTEN       1823/master
tcp6       0      0 :::443                   :::*                    LISTEN      2118/apache2
tcp6       0      0  :::993                  :::*                    LISTEN       1695/couriertcpd
tcp6       0      0 :::995                   :::*                    LISTEN      1731/couriertcpd
tcp6        0      0 :::110                  :::*                    LISTEN       1710/couriertcpd
tcp6       0      0 :::143                   :::*                    LISTEN      1671/couriertcpd
tcp6        0      0 :::8080                 :::*                    LISTEN       2118/apache2
tcp6       0      0 :::80                    :::*                    LISTEN      2118/apache2
tcp6       0      0  :::21                   :::*                    LISTEN       1836/pure-ftpd (SER
```
und dies NACH dem Ausführen von 

```
apache2  stop
```
Man sieht, dass dort immernoch ein Apache Prozess  auf Protokoll TCP6 läuft, obwohl für TCP keiner mehr da ist.

Ich  kann das zwar einfach behebn mit dem Befehl


```
fuser -k -n tcp 80
```
Aber es dauert nicht lange, bis  das Problem wieder auftritt (wobei es nicht jedesmal auftritt, manchmal  braucht es etwas Zeit, bis ein Gracefull Restart den Apache brät).

Ich hab die Confs gecheckt, es gibt keinerlei doppelte Listen Einträge  oder so.

Ich habe das System schon mal neu aufgesetzt, was den  Fehler für eine Weile behoben hat, aber da er jetzt wieder auftritt,  würde ich genre herausfinden, woran es liegt...

Irgendjemand ne Idee?


----------



## Till (22. März 2010)

Da es eine VM ist, vermute ich mal dass der Apache eines der Socket Limits erreicht hat. Du kannst ja mal mit:

cat /proc/user_beancounters

checken, ob Limits überschritten wurden (letzte Spalte failcnt).


----------



## bts_freak (22. März 2010)

Vielen Dank für die fixe Antwort.... das File gibt es bei mir in dem angegeben Ordner nicht...


----------



## Till (22. März 2010)

Ok. Um was für eine VM handelt es sich?


----------



## bts_freak (22. März 2010)

Errm... was meinst du genau? VM Server 2, Image ist von
http://vm.ddcrew.com/ (3.0.1.6 Version)


----------



## bts_freak (22. März 2010)

Ich weiß nicht, ob es hilft, aber auch wenn der Apache noch nicht "unstartbar" ist (wie es nach den beschriebenen Bad file descriptor error der Fall ist), bekomme ich regelmäßig Probleme beim Restart. Ich muss diesen in der Regel 2x ausführen, damit es klappt.

Hier der Fehler:

```
/etc/init.d/apache2 restart
 * Restarting web server apache2                                                 ... waiting (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                                         [fail]
You have new mail in /var/mail/root
root@singha:~# /etc/init.d/apache2 restart
 * Restarting web server apache2
```
In den Confs ist allerdings kein doppelter "Listen 80" Eintrag vorhanden.


----------



## bts_freak (23. März 2010)

Seltsam bzgl. dieses "address already in use" error ist, dass wenn ich einzeln "apache2 stop" and "apache2 start" ausführe, alles super klappt. Das tritt nur mit "apache2 restart" auf...


----------



## Till (23. März 2010)

Du kannst ja mal versuchen im apache2 init script ein sleep 5 oder so in die restart Funktion einzubauen, so dass er 5 Sekunden nach dem stoppen wartet, bis er wieder startet.


----------



## bts_freak (23. März 2010)

cool... sieht so aus als wenn das klappt. Der make_sock Fehler ist bis jetzt nicht mehr aufgetaucht... werd gleich mal checken, ob der Gracefull restart jetzt auch klappt....


----------



## bts_freak (23. März 2010)

Mist, den Apache zerlegt's immernoch mit demselben Bad File Descriptor Error sobald man ISPConfig anfasst und ein Graceful restart gemacht wird.
Und dann geht weder manual stoppen oder starten. Bzw. stoppen geht, aber der Prozess bleibt stehen und dadurch geht das starten nicht mehr. Also bleibt nur der kill.


----------



## Till (23. März 2010)

Ändere einfach die graceful restart Funktiom im apache2 script so dass sie die gleichen Befehle enthält wie die restart funktion.


----------



## bts_freak (23. März 2010)

Hi Till, vielen Dank für die Mühe...
Sorry, aber ich bin mit diesen Apache Scripten noch nicht sehr firm, daher die Nachfrage...

Also /etc/init.d/apache2 hat in dem Sinn keine graceful restart funktion.
/usr/sbin/apachectl hat sowas, und verlässlich kracht der Apache auch  nach dessen Ausführung mit dem bereits beschriebenen Error. 

Ich könnte jetzt in apache2ctl den Part 

```
restart|graceful)
    if $HTTPD ${APACHE_ARGUMENTS} -t 2> /dev/null ; then
        $HTTPD ${APACHE_ARGUMENTS} -k $ARGV
    else
        $HTTPD ${APACHE_ARGUMENTS} -t
    fi
```
umändern, so dass nicht restart oder graceful an den apache ($HTTPD) gegeben wird, sondern ein Start und ein Stop Befehl mit Pause. 

Oder ich könnte in usr/sbin/apache2 rummachen. Welches Script meintest du?


----------



## bts_freak (24. März 2010)

Ok, hab den oben erwähnten Teil ausgetauscht mit Stop und Start.
Ergebnis:
- ohne sleep bekomme ich denselben Makesock Fehler (war zu erwarten)
- ISP Config Restartet jetzt komplett bei Änderungen aus der GUI (inklusive dem Sleep, was heisst, es laufen immer ein paar Ajax Commandos ins Leere inkl. Fehlermeldung). Aber wenigstens fängt er sich dann wieder.

Ich bin mir nicht so sicher, ob ich da so sehr glücklich drüber bin. Ich meine, die Graceful Restarts aus der ISPConfig Oberfläche haben ja schon ihren Sinn, warum sie "graceful" sind. Wenn ich jetzt in der ISPConfig rummache, kann ich mir sicher sein, dass der Apache ein paar mal komplett neu startet, worüber sich die drauf laufenden Webseiten sicher nicht freuen werden...
Was das genau für Auswirkungen hat (Sessions, etc..) weiß ich allerdings nicht genau.


----------



## bts_freak (24. März 2010)

im letzten Kommentar meinte ich natürlich, dass Apache komplett Restartet, nicht ISPConfig...


----------



## Till (24. März 2010)

Ich vermute mal das Dein Problem damit zu tun hat, das der Server in einer VM läuft. Das Linux in der VM scheint zu lange zu brauchen um den Socket bei einem restart freizugeben, daher hilft auch das sleep dazwischen. Wie hoch ist denn die Last auf dem system? Poste mal die Ausgabe von:

uptime


----------



## bts_freak (25. März 2010)

Hier die Ausgabe:
root@singha:/usr/local/sbin# uptime
 14:32:09 up 10:43,  1 user,  load average: 0.00, 0.00, 0.00

Das System läuft praktisch im Leerlauf momentan. Auch der Host VirtualServer zeigt in der VM Console praktisch Nullast.


----------



## Till (25. März 2010)

Hmm, keine Ahnung woran es dann liegen könnte dass er den Port nicht schnell genug wieder freigibt.


----------



## bts_freak (26. März 2010)

Hi Till,

super super vielen Dank trotz allem für die Mühe.

Ich hab mir nochmal den Aufwand gemacht und ein komplett neues VM System aus dem Image aufgesetzt. Das erste was ich auf diem jungfräuhlichen System gemacht habe, ist ein "apache2ctl graceful" auszuführen. Der "Bad File Descriptor Error" taucht da auch auf in den Error Logs. Mit dem einzigen Unterschied, dass es ihn nicht so zum straucheln bringt und dass eine Meldung über den long lost child kommt (sieh unten). Unter Umständen ist das der Prozess, welcher ihn auf dem anderen System zum stocken bringt (da ja dort nach dem Bad FileDescriptor Error immer ein Prozess übrigbleibt, welcher auch mit "apache2 stop" nicht mehr zu killen ist).
Das Log Ergebnis ist:


```
[Fri Mar 26 06:40:15 2010] [notice] Graceful restart requested, doing restart
[Fri Mar 26 06:40:15 2010] [error] (9)Bad file descriptor: apr_socket_accept: (client socket)
[Fri Mar 26 06:40:16 2010] [notice] Apache/2.2.12 (Ubuntu) PHP/5.2.10-2ubuntu6 with Suhosin-Patch mod_ssl/2.2.12 OpenSSL/0.9.8g configured -- resuming normal operations
[Fri Mar 26 06:40:16 2010] [warn] long lost child came home! (pid 1886)
```
Und die Meldung über den Nasty Error im Parent Prozess ist auch nicht da...

Naja, anyway... vielleicht taucht ja noch eine Idee bei dir auf, ansonsten kann man es wohl nicht ändern...


----------



## Burge (27. März 2010)

nihm doch mal nicht dieses fertige image. Setz dir ein linux host in einer vm auf und installiere darin ispconfig nach einem der zahlreichen anleitungen hier auf howto forge. 

Nebeneffekt so lernt man gleich mit wie ispconfig so laeuft welche packet/dienst was macht usw


----------

