ISP Config Crash nach Graceful Restart

bts_freak

New Member
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:

Code:
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:
Code:
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
Code:
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

Code:
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

Administrator
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

New Member
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:
Code:
/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

New Member
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

Administrator
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

New Member
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

New Member
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

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

bts_freak

New Member
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
Code:
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

New Member
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.
 

Till

Administrator
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

New Member
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

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

bts_freak

New Member
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:

Code:
[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

Member
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
 

Werbung

Top