websocketd als Windows-Service

Gast #6215767
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
1
sc create websocketd Displayname= "websocketd" binpath= "C:\ws\websocketd.exe --port=8080 C:\ws\testprogramm" start= auto

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 
:)
Gast
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...
Gast
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.
Gast
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?
Gast
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):
1
[Unit]
2
Description=websocketd
3

4
[Service]
5
ExecStart=/home/dev/ws/websocketd --port=8080 /home/dev/ws/test.sh

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?
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.