Wie WebServer vom WebServer aus neustarten ?

yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Wie WebServer vom WebServer aus neustarten ?

Beitrag von yjogol »

Für das yWeb gibt es ja die Möglichkeit Updates in den /var-Bereich einzuspielen.

Ich möchte nun über den WebServer ein Skript starten, dass
1) ihn beendet
2) einen neuen WebServer (nhttpd) installiert
3) den Neuen startet

Nun gibt es da natürlich ein Problem:
Das Skript ist ein Tochter-Prozeß des WebServers. Beendet dieses Skript den WebServer, wird es selbst beendet. Dass ist natürlich nicht das was ich brauche?

Jemand eine Idee, wie ich das Skript nicht als Tochter-Prozess starten kann? Oder eine andere Idee?

Gruß
yjogol
Barf
Developer
Beiträge: 1475
Registriert: Dienstag 4. Februar 2003, 22:02

Beitrag von Barf »

Hallo yjogol,

kuck nach in neutrino.cpp wie ich es das Neustarten des Neutrinos implementiert habe. (suche nach execvp) Neutrino exec-t einfach sich selbst, sogar mit den gleiche Augumente womit es gestartet war. Ist mir inzwischen sehr nützlig wenn ich mit neutrino rumfummele.
Liontamer
Klöppelliese
Beiträge: 1644
Registriert: Donnerstag 8. August 2002, 12:51

Beitrag von Liontamer »

Ein Anfang ist folgendes:
Erstelle ein skript, mit folgendem Inhalt:

Code: Alles auswählen

#! /bin/sh
( killall -9 nhttpd ; sleep 5 ; /bin/nhttpd ) &
Dieses startest du dann vom Webbrowser aus.

Ich bekomm dann nach 5sec allerdings die Fehlermeldung "bind: Address already in use". Woran das liegt, weiss ich leider nicht. Aber evtl. weiss jemand mehr dazu :)
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Liontamer hat geschrieben:Ein Anfang ist folgendes:
Erstelle ein skript, mit folgendem Inhalt:

Code: Alles auswählen

#! /bin/sh
( killall -9 nhttpd ; sleep 5 ; /bin/nhttpd ) &
Dieses startest du dann vom Webbrowser aus.

Ich bekomm dann nach 5sec allerdings die Fehlermeldung "bind: Address already in use". Woran das liegt, weiss ich leider nicht. Aber evtl. weiss jemand mehr dazu :)
ja, das geht leider nicht ... hatte ich auch schon versucht.
@barf: probier ich morgen mal

Danke
yjogol
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Ok, beide Lösungen gehen theoretisch.
So wie es aussieht laufen alle Lösungen auf ein "socket bind" Problem hinaus.

Das ist ein ganz anderes Problem :gruebel:
Liontamer
Klöppelliese
Beiträge: 1644
Registriert: Donnerstag 8. August 2002, 12:51

Beitrag von Liontamer »

Hast du denn mittlerweile eine Lösung gefunden?
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Liontamer hat geschrieben:Hast du denn mittlerweile eine Lösung gefunden?
Also ich habe ein paar Stunden darauf verbracht; das Problem sind also nicht die Prozesse, das geht mit beiden Lösungen.

Es wird ein Socket erstellt und mit bind gebunden.
Ich habe keinen un-bind Befehl gefunden. Es gibt zu dieser Problematik extrem viele Anfrage im Internet. un-bind wird vom Betriebssystem nach einer Timeoutzeit durchgeführt, erst dann kann ein erneuter bind auf IP und Port durchgeführt werden.

So, wie es aussieht, muß ein Befehl implementiert werden, der die Verbindung zum Browser sauber beendet, dann der WebServer beendert werden und "irgendwie" muß er dann neustarten.

Noch magelt es an einer einfachen Lösung.

Gruß
yjogol
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

wie wäre es den thttpd mit folgendem skript initial zu starten:

Code: Alles auswählen

#!/bin/sh 

while true ; do 
    /usr/local/sbin/thttpd -D -C /usr/local/www/thttpd_config 
    sleep 10 
done
Pfade natürlich anpassen

Dann brauchst Du Ihn nur zu killen und er wird wieder neu gestartet - automatisch. Diese Art Watchdog wird auf der thttpd HP vorgeschlagen http://www.acme.com/software/thttpd/notes.html
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Ja, das ist sicher eine gute Idee, allerdings müßte die Image-Bauer dies mit in ihre Startskripts einbauen.
Ich probier erstmal aus, ob dies überhaupt zum Erfolg führt.

Gruß
yjogol
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

naja - ist doch nur formsache ob jetzt der thttpd gestartet wird oder ein script was ihn startet. Kann ja so aussehen: /etc/start_thttpd

wenn Du das kill -me hinkriegst sollte das so funzen. Gleichzeitig ist es ein safety net für den normaleinsatz :wink: :lol:
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Tommy hat geschrieben:naja - ist doch nur formsache ob jetzt der thttpd gestartet wird oder ein script was ihn startet. Kann ja so aussehen: /etc/start_thttpd

wenn Du das kill -me hinkriegst sollte das so funzen. Gleichzeitig ist es ein safety net für den normaleinsatz :wink: :lol:
Jau, da kann ich mal einen Vorschlag machen.
Du meinst einen kill und kill -HUP nehme ich an ...
Das ist etwas Fummelei mit traps ...
aber das Hauptproblem ist es, ein solches Skript auszurollen.

Gruß
yjogol
Zuletzt geändert von yjogol am Freitag 28. April 2006, 11:48, insgesamt 1-mal geändert.
FAQ zu YWeb unter http://www.yjogol.de
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

bei newmake hast Du gute Karten - wenns sinvoll ist baut's Barf mit Sicherheit ein.
Bei head müßten vermutl. die proparitären "Montagescripts" angepaßt werden.

Wie Du Deinen deamon am besten um die Ecke bringst mußt Du schon selbst probieren - Da kenne ich mich nich aus :wink:
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?