Fehler beim Starten des Apache

Hallo HaBo-Com,
habe mich gestern angemeldet da mir unser gemeinsamer Freund Google nicht helfen konnte und ich in einem anderen Forum, seit einer Woche, keine Antwort erhalten habe.

Nun aber zu meinem Problem.

Nachdem ich auf meinem Entwicklungs-Web-Server openSuse 11.4 installiert hatte, wollte ich natürlch auch Apache installieren.
Die Installation und Grundkonfiguration des Apache hatten ohne Probleme funktioniert.
Allerdings, wenn ich in der "listen.conf"-Datei den Eintrag "Listen 80" durch auskommentieren deaktiviere und den Eintrag "NameVirtualHost *:80" durch entkommentieren aktiviere und danach die von mir schon seit Jahren erfolgreich eingesetzten vhost-Dateien in das vhost-Verzeichniss speichere erhalte ich bei dem Versuch die Konfiguartion neuladen zu lassen bzw. den Apache starten zu lassen die Meldung
no listening sockets available, shutting down
Unable to open logs

Was ich sicher sagen kann ist, dass keine andere Software auf den Ports 80 und 443 lauscht. Auch hilft es nicht den Apache auf einen anderen (deutlich) höheren Port zu zwingen, es kommt die gleiche Meldung.

Alle anderen bisher von mir eingerichteten Server-Programme (Bind und Samba) ließen sich ohne Probleme installieren und Konfigurieren und arbeiten auch so wie sie sollen.

Das selbe gilt auch für openSuse 11.3

Ich hoffe Ihr könnt mir noch den ein oder anderen Tipp geben.


Kai aka Knight1
 
Die Listen-Direktive muss in der Apache-Konfiguration vorhanden sein, damit der Webserver weiss an welchem Port er lauschen soll. Das kann er nicht über ein Named Virtual Host tun. Das "Unable to open logs" deutet ausserdem darauf hin, dass der Webserver in seine Logs nicht schreiben kann, weil ihm die notwendigen Rechte fehlen.
 
Ich dachte immer dass mit dem Port lauschen erfolgt bei der NameVirtualHost-Direktive über den Part *:80
Bisher hat's, wie ich schon geschrieben habe, immer so funktioniert wie ich es beschrieben habe.

Bei irgendeinem der Google-Ergebnisse hatte ich mal gelesen dass das mit dem Unable to open logs eine direkte Folge der ersten Meldung sein soll.

Kai aka Knight1
 
Sorry für meine späte reaktion.

1. War es immer der jeweils aktuelle 2.xER
2. Wenn ich zusätzlich zu Listen 80 auch noch NameVirtualHost *:80 aktiviere "schimpft" er zusätzlich mit
( 98 )Address already in use: make_sock: could not bind to address 0.0.0.0:80
Danach kommt die "Listening"-Meldung wieder.
So wie es aussieht kommt die "Listening"-Meldung nur wenn ich die Direktive NameVirtualHost aktiviere.


Kai aka Knight1
 
Bevor wir hier weiter spekulieren, solltest du ggf. einfach deine Konfiguration des Apache komplett posten (kannst ja IPs und Domains/Hostnamen entfernen, für die Übersichtlichkeit bitte auch die Kommentare rausnehmen :) ), so dass man schauen kann ob ggf. irgendwelche Konflikte bestehen. NameVirtualHosts in Verbindung mit Listen-Direktiven machen jedenfalls üblicherweise keine Probleme. Ich nutze diese Kombination auf allen meinen Webservern.

Beispiel vom HaboLinux-SVN-Server:

Code:
h1605479:/etc/apache2# grep -r Listen ./
./ports.conf:Listen 80
./ports.conf:    Listen 443
h1605479:/etc/apache2# grep -r VirtualHost ./
...
./ports.conf:NameVirtualHost *:80
./mods-enabled/dav_svn.conf:<VirtualHost *:80>
....
 
Habe einfach mal das komplette apache2-Verzeichniss als ZIP-Datei hochgeladen anstatt alles hier in den Editor zu kopieren.

apache2-original ist die Standard-Konfiguration die funktioniert.
apache2-angepasst ist die von mir geänderte die nicht funktioniert aber sonst immer funktioniert hat. Habe auch eine vhost-Datei die ich verwende beigefügt.


Kai aka Knight1
 
Also bis auf das auskommentierte 'Listen 80' kann ich auf den ersten Blick keinen Fehler sehen. Wenn die Meldung kommt, dass der Port 80 bereits belegt ist sobald du die Listen-Direktive drin hast, was sagt dir - netstat -lntpa | grep ':80' - dann? Ist da evtl. noch ein Zombie-Thread aktiv o.ä.?
 
AAAlso. :)

Wenn ich nach der "Anpassung" einfach nur httpd2 --gracefull ausführe und dann den Befehl netstat mit den von dir genannten Parametern ausführe, habe ich folgende Ausgabe auf der Konsole:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4807/httpd2

Wenn ich httpd2 --stop und dann httpd2 --start aus führe und dann nochmal den netstat-Befehl erhalte ich die selbe Ausgabe.

Es scheint mir so als ob der Apache trotzdem startet bzw. garnicht abschaltet.

Kai aka Knight1
 
Stop den Apache mal und schaue dann in der Prozessliste, ob noch ein Prozess läuft. Wenn dort keiner auftaucht, schau nochmal in die netstat-Ausgabe. Sollte dort noch ein Prozess auftauchen, sende mittels 'kill -9 <PID>' ein SIGKILL an den entsprechenden Prozess. Danach nochmal schauen ob er weiterhin im netstat auftaucht. Wenn dann sicher ist, dass der Port frei ist, starte den Apache nochmal und schau dir während des Starts die Error-Log mittels 'tail -f dateiname' an. Was dann dort an Output durchrasselt, postest du am Besten nochmal hier, sofern dort noch Fehler auftauchen.
 
Ich dreh' noch durch. :wall:

Siehe listen.conf im Anhang.
Wenn ich hingehe und stoppe den Indianer aus der Runlevel-Übersicht des YAST, habe mittlerweile wieder openSuse 11.3 am laufen, und starte ihn dann wieder, dann startet er ganz normal ohne Fehlermeldung.
Das einzige was er in die error.log schreibt ist eine Notice:
[Fri Jun 03 16:19:40 2011] [notice] Apache/2.2.15 (Linux/SUSE) PHP/5.3.7-dev configured -- resuming normal operations

Und auch wenn ich den ganzen Server neustarte wird der Apache auch normal gestartet und lädt die vhosts inklusive aller PHP-Settings usw..

Wenn ich netstat wird der Apache auch korrekt als auf dem Port 80 lauschend angezeigt.
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2613/httpd2-prefork

Das dürfte der "Master"-Prozess des Apache sein der da auf Port 80 und allen IP-Adressen lauscht.

Sobald ich einen der vhosts Aufrufe, so habe ich auch korrekterweiße den/die Child-Prozess(e) in der netstat-Ausgabe.

Ich sitze hier seit fast 2 Wochen ohne einen Schritt weiter zu kommen. Und jetzt auf einmal läuft es.

Also ich kann nur sagen :wall::wall::wall::wall::wall::wall::wall:

Schau dir bitte mal fogende Befehle an:

httpd2 --gracefull
und
httpd2 -k graceful

Der Parameter des ersten ist falsch.
Die Parameter müssen wie beim zweiten übergeben werden. Siehe Konsolen-Screenshot im Anhang.


Trotzdem Danke für die Mühe.


Kai aka Knight1
 
Wenn du in Zukunft solche Verwirrungen mit Parametern vermeiden willst, dann nutze nicht die Skripte der Distribution (wie httpd2, apache2 etc.), sondern direkt apachectl. Das ist auf allen Systemen gleich und kommt direkt aus den Apache-Sources.
 
Zurück
Oben