Daemons laufen nicht richtig über xinetd

Software besorgen und anwenden
Post Reply
Message
Author
bin4ry
Posts: 2
Joined: 13. Apr 2004 21:10
Contact:

Daemons laufen nicht richtig über xinetd

#1 Post by bin4ry »

Hey zusammen,

ich wollte diverse dienste von xinetd verwalten lassen. Dies wären ein apache2 daemon und ein mysql daemon. Meine xinetd.conf ist folgendermaßen aufgebaut:

Code: Select all

defaults
{
	log_type        = FILE /var/log/xinetd.log 
        log_on_success  = HOST EXIT DURATION
	log_on_failure	= HOST ATTEMPT
        only_from       = localhost
        instances       = 30
	cps		= 50 10

#
# The specification of an interface is interesting, if we are on a firewall.
# For example, if you only want to provide services from an internal
# network interface, you may specify your internal interfaces IP-Address.
#
	interface	= 127.0.0.1

}

includedir /etc/xinetd.d
Ich benutze darum die 'interface' und 'only_from' argumente, weil ich die beiden daemons nur für eine lokale php-testumgebung brauche und sie nur auf der loopback lauschen sollen.

Hier die jeweiligen einträge in /etc/xinetd.d/ für die beiden daemons:

apache

Code: Select all

service http
{
	disable     = no
	socket_type = stream
	protocol    = tcp
	wait        = no
	user        = root
	server      = /usr/sbin/httpd2
        port        = 80
}

mysql

Code: Select all

service mysql
{
	disable     = no
	socket_type = stream
	protocol    = tcp
	wait        = no
	user        = mysql
	server      = /usr/sbin/mysqld
}

Die beiden services hab ich vorher natürlich via runlevel editor vom starten durch init gehindert.

Wenn ich nun mit einem browser auf localhost zugreife kommt frolgende ausschrift:

(98)Address already in use: make_sock: could not bind to address [::]:80
no listening sockets available, shutting down
Unable to open logs


Meine frage: warum schafft es xinetd nicht den service an den port zu binden? Warum wird port 80 bereits benutzt? Ich hab doch apache2 disabled? Das selbe problem bei mysql. Er kann den service nicht auf port 3306 binden, da angeblich kein socket da ist, der lauschen kann, weil der port bereits benutzt wird.

Ein telnet connect zu localhost:3306 gibt folgendes ergebnis:

Can't start server: Bind on TCP/IP port: Address already in use.
Do you already have anoter mysqld server running on port: 3306 =
Aborting
mysqld: Shutdown Complete

Irgendwo muss jeweils eine weitere instanz von den zweid aemons laufen. Ich weiß nicht wo bzw. wie ich das problem fixen kann.

Any hints?

--bin4ry

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Wenn ein Dienst durch den inetd/xinetd gestartet werden soll, darf er sich nicht selbst an die Ports binden! Statt dessen liest ein so gestarteter Daemon den Client-Request von stdin und schreibt das Ergebnis nach stdout, was der xinetd ihm vorher netterweise auf die Netzverbindung umgebogen hat.

Den Apache sollte man sicherlich auf xinetd-Betrieb konfigurieren können (wenn ich jetzt auch selbst nicht genau weiss, wie). Beim mysqld bin ich mir da nicht so sicher, ob der diese Methode beherrscht. Ausserdem würde er ja pro Request eine Instanz des DBMS starten wollen... Hm, das wirst Du ausprobieren müssen.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

bin4ry
Posts: 2
Joined: 13. Apr 2004 21:10
Contact:

#3 Post by bin4ry »

Hey jochen,

yep, also ich weiß, dass sich der serviće nicht selbst an den port binden darf. Sondern dass xinetd das übernimmt.

Das ganze mache ich eigentlich nur aus sicherheitszwecken (und damit ich etwas über xinetd lerne). Will halt, dass apache und mysqld nur auf localhost:port erreichbar sind. Ich will nicht, dass sie an jeder ip lauschen, sondern nur auf localhost.

Hab das problem mit apache bordmitteln gelöst: Hab halt in der /etc/apache2/listen.conf den apache an localhost interface gebunden.

Wollte das halt auch mal mit xinetd ausprobieren, um zu verstehen, wie xinetd funktioniert. Muss jetzt nur nocheine lösung für mysql finden.

--bin4ry

Post Reply