Hallo
Ich möchte einen Websocket-Server auf Windows laufen lassen und bin auf
http://websocketd.com/ gestossen. Von cmd aus funktioniert das auch
einwandfrei, nur bekomme ich nicht hin daß es als Service läuft.
Probiert habe ich es mit
In cmd gibt das keinen Fehler, der Dienst taucht in der Systemsteuerung
unter Dienste auf, bloß kommt ein Fehler daß er nicht auf Start/Stopp
antwortet. Btw, es ist Win7, aber darauf habe ich keinen Einfluß. Bin
normal unter Linux beheimatet, daher sind Windows Internas eher Neuland
:)
Jim M. schrieb:> Die Leerzeichen hinter den "=" sehen bedenklich aus - probiere es> mal> OHNE diese Leerzeichen.
Ganz so einfach ist bei MS wohl nichts.
"Note that there is no space between the Optionname and the equal sign."
"Note that there is a space between OptionValue and the equal sign."
https://support.microsoft.com/en-us/help/251192/how-to-create-a-windows-service-by-using-sc-exe
Ohne das richtige Leerzeichen geht's nicht. MS-Logik...
Heiko schrieb:> Bin> normal unter Linux beheimatet, daher sind Windows Internas eher Neuland> :)
Deswegen eine Frage: Warum willst du diese Folter dann unbedingt machen?
T.roll schrieb:> Deswegen eine Frage: Warum willst du diese Folter dann unbedingt machen?
Weil es leider keine Option ist,
- das OS auszutauschen, oder
- einen weiteren Rechner 24/7 laufen zu lassen
In meiner Verwirrtheit nahm ich halt an, daß ein Programm zum Erstellen
eines Dienstes auch brauchbar funktioniert.
Heiko schrieb:> In meiner Verwirrtheit nahm ich halt an, daß ein Programm zum Erstellen> eines Dienstes auch brauchbar funktioniert.
Hast Du ein solches Programm? Wenn ja, welches ist das?
Hinweis: Einfach mal nur "sc create" ohne irgendetwas eingeben, dann die
Beschreibung lesen. Du kannst damit Deinen Dienst bekannt machen, sonst
nichts. Der Dienst selber muss bereits erstellt sein. Ist
"websocketd.exe" ein Dienst?
Mox schrieb:> Hast Du ein solches Programm? Wenn ja, welches ist das?
sc.exe kommt bei Widows von Haus aus mit. Laut Doku kann man damit
Binaries als Dienste (binPath= <BinaryPathName>) einrichten.
Mox schrieb:> Ist "websocketd.exe" ein Dienst?
Also auf meinem Testrechner unter Linux funktioniert der Linuxdownload
der Binary von der Seite wie ein Dienst (via systemd):
Dann "systemctl daemon-reload && systemctl start websocketd" und schon
kann der Browser sich verbinden. Das muß ja bei Windows ähnlich gehen.
Johannes S. schrieb:> Da dürfte Mox richtig liegen. Wenn es ein Standardprogramm ist, dann> hilft der NSSM: http://nssm.cc/
Also ist sc.exe einfach nur nutzlos und tut nicht was es eigentlich
soll?
in der Doku zum websocketd sollte drinstehen ob es ein echter
Windowsdienst ist. Es gibt einige Programme die zwar ein d suffix haben,
aber unter windows keine Dienste sind. In dem Fall ist sc nutzlos bzw.
du siehtst genau deinen Effekt, die Programme werden als Dienst
eingetragen aber reagieren nicht auf die speziellen Windows Messages für
Dienste.
sc kann aus einem einfachen Programm keinen Dienst machen, das machen
eben die Krücken NSSM oder das ältere SrvAny. Die Starten sich und dann
das eigentliche Programme, das sind damit aber immer noch keine echten
Dienste.
Heiko schrieb:> sc.exe kommt bei Widows von Haus aus mit. Laut Doku kann man damit> Binaries als Dienste (binPath= <BinaryPathName>) einrichten.
Wenn es sich bei den Binaries um Dienste handelt, werden sie damit
entsprechend eingerichtet, ja. Allerdings macht sc aus einem Binary
keinen Dienst, das muss vorher schon gegeben sein.
Heiko schrieb:> Also ist sc.exe einfach nur nutzlos und tut nicht was es eigentlich> soll?
Es macht genau das, was es laut Doku machen soll. Und weiter oben hast
Du gesagt, dass das auch perfekt funktioniert hat.
Mox schrieb:> Es macht genau das, was es laut Doku machen soll. Und weiter oben hast> Du gesagt, dass das auch perfekt funktioniert hat.
*websocketd.exe* macht genau das, was es soll wenn ich es von cmd aus
starte. *sc.exe* akzeptiert (ohne Fehlermeldung, liefert sogar eine
Erfolgsmeldung) die Einrichtung eines Dienstes mittels websocketd.exe
als Binary, aber Windows kann diesen Dienst dann nicht starten. In der
Doku habe ich nichts darüber gelesen, daß das nur mit besonderen
Binaries funktioniert.
Unter Linux kann ich das einfach als Dienst laufen lassen, aber hier muß
ich halt Windows nehmen.
Ginge das mit bat oder powershell als Wrapper?
Heiko schrieb:> In der> Doku habe ich nichts darüber gelesen, daß das nur mit besonderen> Binaries funktioniert.
Doch. Es gibt eine API für Dienste, die bestimmte Methoden unterstützen
müssen, z.B. OnStart und OnStop. Der schon genannte NSSM ist ein Wrapper
für normale Programme, der diese Methoden zur Verfügung stellt und
emuliert.
Mario M. schrieb:> Der schon genannte NSSM ist ein Wrapper> für normale Programme, der diese Methoden zur Verfügung stellt und> emuliert.
Na dann werde ich mir das mal genauer anschauen, danke.
Johannes S. schrieb:> @Heiko: warum stellst du nur Fragen und liest die Antworten nicht?
Ich habe die Anworten sehr wohl gelesen, aber ich konnte/wollte nicht
glauben daß Windows so schlecht ist. Als Linuxuser darf man sich von
Windowsleuten immer anhören, wie rückständig und komplex es ist,
umständlich in Konfigs was anzupassen, und wie bequem doch alles bei
Windows ist.
Jetzt muß ich einmal Windows nutzen, und es geht prompt nicht ohne
irgendwelche Tools von Dritten etwas als Dienst laufen zu lassen. Genau
das, wofür das OS eigentlich u.a. da ist.
Heiko schrieb:> aber ich konnte/wollte nicht> glauben daß Windows so schlecht ist.
Das Konzept der Services gibt es seit NT 3.5 und funtkioniert heute
ungeändert. Mit den Glaubenskriegen SystemV vs. systemd kann man Bücher
füllen, alleine mit dem was hier im Forum dazu geschrieben wurde.
Services unter Windows sind Programme die zusätztliche Anforderungen
haben. Das ist einfach so, auch wenn man Linux besser findet.
Heiko schrieb:> Jetzt muß ich einmal Windows nutzen, und es geht prompt nicht ohne> irgendwelche Tools von Dritten etwas als Dienst laufen zu lassen. Genau> das, wofür das OS eigentlich u.a. da ist.
Ne, ein OS ist nicht dafür da einfach etwas als Dienst laufen zu lassen
oder alles mögliche zu ermöglichen.
Unter Linux läuft Dein Zeug ja auch nicht ohne 3ttools. Systemd ist kein
OS, das ist zusatzsoftware.
PS: Win suckt trotzdem tierisch, zumindest für mich.
Johannes S. schrieb:> Services unter Windows sind Programme die zusätztliche Anforderungen> haben.
Wäre nett wenn MS das klarer in der sc-Doku machen würde; dann hätte ich
mir einige Zeit sparen können. Aber anscheindend lesen die nicht mal die
Autoübersetzungen zur Korrektur und lassen Fehler drin.
ClosedBSD schrieb:> Ne, ein OS ist nicht dafür da einfach etwas als Dienst laufen zu lassen> oder alles mögliche zu ermöglichen.
Doch. Dafür hat man ja root. Wenn man sein OS schrottet ist man eben
selber schuld. Schlimm genug daß man als Admin bei Windows auch nur ein
kleinwenig besserer User ist und sich vom OS bevormunden lassen muß.
ClosedBSD schrieb:> Unter Linux läuft Dein Zeug ja auch nicht ohne 3ttools. Systemd ist kein> OS, das ist zusatzsoftware.
Systemd(*) ist als init System ein integraler Bestandteil des OS; ohne
einen init Prozess wird sich kaum ein benutzbares OS booten lassen. Es
kommt selbst bei der Minimalinstallation mit und daher gehört es für
mich zum OS; wie auch der Dienstemanager bei Windows.
*) irgendwann ist Systemd bestimmt ein eigenes OS wenn man sieht was
Poettering & Co da alles reinpacken was dort nichts verloren hat.
Johannes S. schrieb:> Services unter Windows sind Programme die zusätztliche Anforderungen> haben.Heiko schrieb:> ClosedBSD schrieb:>> Unter Linux läuft Dein Zeug ja auch nicht ohne 3ttools. Systemd ist kein>> OS, das ist zusatzsoftware.>> Systemd(*) ist als init System ein integraler Bestandteil des OS; ohne> einen init Prozess wird sich kaum ein benutzbares OS booten lassen. Es> kommt selbst bei der Minimalinstallation mit und daher gehört es für> mich zum OS; wie auch der Dienstemanager bei Windows.
Prinzipiell richtig. Der Dienstemanager ist aber nur das graphische
Userinterface des Dienstesystems von Windows. Und sc.exe ist halt das
Kommandozeileninterface dafür und ist daher am ehesten mit dem Kommando
"systemctl" unter Linux vergleichbar. "sc create" erzeugt nur die
passenden Registry Einträge. Etwas was Dein geliebtes systemctl z.B.
nicht kann, da mußt Du die Units von Hand definieren wenn sie nicht mit
dem Service mitgeliefert werden.
Und auch unter Linux muß ein Programm, das sauber als Service arbeiten
soll entsprechend programmiert sein (fork,signal,...), sonst gibt es
unter Umständen spätestens beim Beenden Datenmüll.