Netserver - Regelmäßige Netzwerk-Neustarts Regelmäßige Netzwerk-Neustarts

Geschrieben am Freitag, 28.Juli. @ 17:43:51 CEST von Baron
---------------------------------------------------------------------------------------------------


BeOS' Networking Stack wird zur Zeit komplett neu geschrieben und durch einen sehr leistungsfähigen auf BSD Networking basierten Stack ersetzt (s. die BONE Story auf BeNews). BONE wird voraussichtlich in einem Update kurze Zeit nach R5 erscheinen.

Bis dahin gibt es zwei Situationen, in denen es ganz praktisch ist das Networking automatisch zu festen Zeiten oder durch ein Skript neuzustarten:

1. Wenn Du einen BeOS Web Server laufen hast, wirst Du feststellen, daß einige TCP Threads nicht ordentlich beendet werden. Mit der Zeit (nach so ca. 14.000 Hits) können diese nicht-beendeten Threads den Network Stack belasten, was das Netzwerk in die Knie zwingt. Um den Status dieser Threads zu erfahren gibst Du im Terminal ps | grep tcp ein. Das Netzwerk kann neu gestartet werden, indem Du in den Networking Preferences auf "Restart Networking" klickst. Wahrscheinlich willst Du das aber automatisieren, damit es regelmäßig ohne Dein Zutun geschieht.

2. Falls Du eine DHCP Verbindung hast, wird die an Dich vergebene IP oder DNS Adresse je nach Provider alle ein, zwei Tage ablaufen. Du wirst Dein Netzwerk also am besten alle 24 Stunden oder so neu starten lassen, um automatisch neue Adressen zu bekommen.

Als erstes benötgst Du einen Befehl um das Networking neu zu starten, den Du dann zu festen Terminen oder in einem Skript aufrufen kannst. Hol Dir diese neue Version von John Wiggin's net_restart und lies das dazugehörige ReadMe. Du mußt den Source für Deine Platform kompilieren, die Anweisungen dazu sind aber sehr einfach. Schiebe die kompilierte net_restart Datei nach ~/config/bin.

Während Du wohl instinktiv daran denkst net_restart von cron aus zu starten, wirst Du schnell merken, daß das nicht so einfach ist -- cron hat nicht Zugriff auf alle Umgebungsvariablen, die das Networking zum korrekten Neustart braucht. Ich habe damit geraume Zeit gerungen bevor ich aufgegeben habe. Es gibt Gott sei danke einen anderen Weg: Besorg Dir Brian Tietz' Scheduler von BeDepot. Ruf den net_restart vom Scheduler aus auf und alles klappt perfekt. Außerdem ist Scheduler eine echte BeOS Anwendung und dazu 10 mal einfacher zu bedienen.

Es bleibt ein Haken: wenn Du das Networking neu startest, schießt Du auch den Web Server ab. Ich benutze Robin Hood und habe ein kleines Skript geschrieben, um dieses Problem zu umgehen. Das Skript beendet einfach nur den Robin Hood Daemon, ruft net_restart auf und startet danach wieder den Daemon. Speicher das Skript unter ~/config/bin/network_getup und ruf es vom Scheduler aus auf. Die Pfade mußt Du wahrscheinlich an Dein System anpassen.

#!/bin/sh

#Networking und Robin Hood Daemon neustarten
/bin/kill -9 rhdaemon
/boot/home/config/bin/net_restart
/boot/apps/net/RobinHood/server/rhdaemon &