Linux: Port "Bereinigen" wie?
Ich habe auf meinem Linux Debian Server einen Minecraft Server am laufen. Dieser nutzt port 25565 und wird über einen screen-Befehl ausgeführt.
Es kann aber manchmal passieren, das der Minecraft Server zwar angeschaltet ist, aber man keine verbindung dazu aufbauen kann... In diesem fall Stoppe ich den MC Server normalerweise über den Befehl "stop" (der server hat eine Interne Console.). Da das aber auch oft nicht geht (MY nimmt keine befehle mehr an) muss ich den screen mit "kill" beenden. Dann wird aber der port nicht bereinigt und um den MCServer wieder auszuführen muss ich erst den Gesammten Linux Server neustarten. Das ist nervig. Daher meine Frage:
Gibt es eine Möglichkeit, den Port 25565 mit einem Befehl zu "bereinigen", das also sozusagen alle laufenden Programme, die an diesem Port gebunden sind von ihm gelöst werden?
hoffe, ihr könntm ir helfen ^^
4 Antworten
ein Listenport braucht manchmal einfach ein paar Sekunden, bis er frei ist. Ein Neustart ist nicht notwendig, einfach nur kurz ein bischen warten.
Hallo gumpo03,
muss ich den screen mit "kill" beenden. Dann wird aber der port nicht bereinigt
Normalerweise sollte der Kill-Befehl die abhängigen Applikationen ebenfalls beenden, probiere doch mal die Option -9 mit kill. Alternativ kannst Du natürlich auch einfach das Netzwerk restarten:
/etc/init.d/networking restart
Aber ganz ehrlich, das ist nicht der richtige Weg, Du solltest lieber herausfinden warum es zu diesen Hängern oder Abstürzen kommt und diesen Umstand beseitigen.
Nicht die Auswirkung sondern die Ursache muss abgeschafft werden!!lieben Gruß aus Zuahus
Das das Programm ab und zu hängenbleibt, liegt daran, das es von der Minecraft Server Software (Bukkit) noch keine Offizielles Release-Packet gibt. Bis jezt gibt es nur ein offizielles für eine ältere Minecraft-Client version und eine art Beta der Serversoftware. Da ich auf die neue Version nicht verzichten möchte, benutze ich diese Beta. Die ist allerdings noch nicht ganz ausgereift und führt daher wohl zu gelegentlichen aufhängern der Software.
PS: Thx für die Antword, werd ich mal ausprobieren ^^
Derartige Effekte können auch bei anderen Servern auftreten, wenn auch recht selten. Die Ursache liegt meisst im Programmcode der Serveranwendung selbst, ( woran der Benutzer unwahrscheinlich selbst was ändern kann ) oder anhängiger Bibliotheken. Die offenen Ports kann man an einem Terminal mit:
netstat -l -p (-n)
( Das -n ist optional und zeigt die verwendeten Ports nur als Zahl an ) auflisten lassen. Die Anzeige erfolgt 7 - spaltig, Proto( tcp udp ipx ), Recv-Q ( Empfangswarteschlange ), Send-Q ( Sendewarteschlange ), Local Address ( lokale IP-Adresse : Port ), Foreign Address ( Quelladresse bei lokalen Prozessen immer 0.0.0.0 : Port ), State ( Zustand / Eigenschaft der Verbindung, listen = lauschen = geöffneter Port ), PID Program Name ( PID des Prozesses, der den Socket geöffnet hat, Name des Prozesses )
Mit diesen Infos kann man versuchen den hängenden Prozess zu beenden ( kill PID ). Die Liste ist der Spiegel der lokalen Netzwerkinterfaces und wird vom Scheduler des Kernels aktualisiert. Achte bei netstat -l -p auf Recv-Q und Send-Q. Wenn nichts los ist, sollten diese Werte 0 sein, zumindest niedrig und sich ständig ändern. Steht da eine Zahl und ändert sich nichts, hilft nur noch ein Neustart. denn die Serveranwendung hat den Netzwerkadapter durch einen Pufferüberlauf, Pagefehler o.A. abgeschossen, zumindest die Verbindung für diesen Socket. Bleibt der Prozess trotz kill im Speicher und der Port geöffnet, hilft wirklich nichts anderes,als ein kompletter Neustart des Servers. So etwas darf eigentlich nicht passieren und deutet auf eine fehlerhafte Anwendung oder fehlerhafte Systemumgebung hin. Wenn andere dieses Problem nicht haben, kann es nur die Systemumgebung oder auch ein Hardwarefehler sein. Wurde der Speicher schon getestet ? Ein geringfügiger Speicherfehler oder auch eine knappe Größe kann sich genau so auswirken ! Läuft ansonsten das System stabil ? Oft deckt ein Blick in die Syslogs ( /var/log/syslog , /var/log/messages ) solche Fehler auf...
Man kann eine Port nicht "bereinigen" Entweder belegt ein Programm den Port oder nicht. Wenn der Port nicht frei ist, dann läuft wohl noch irgend ein Programm was zu dem Minecraft Server gehört und den Port belegt.
Schau mal hier http://mrfoo.de/archiv/621-Welches-Programm-nutzt-einen-bestimmten-Port.html Da steht, wie du herausfindest, welches Programm einen bestimmten Port belegt.
ist leider nicht ganz richtig. Offensichtlich wird bei einer Belegung eines Ports eine Liste angelegt, die beim Killen des betreffenden Prozesses nicht bereinigt wird. Auch bei einem exit , ohne dass der Server-Port mit close geschlossen wurde, bleibt der Port belegt (/usr/bin/socklist zeigt auch noch den Port und die pid des gekillten Prozesses) Es scheint aber irgendjemand in bestimmten Zeitabständen eine Prüfung vorzunehmen und die Liste zu bereinigen.
Wer das macht und wie man das beschleunigen könnte, habe ich noch nicht herausbekommen. Die Zeit liegt aber unter 30 Sekunden.