Forum: PC-Programmierung websocketd als Windows-Service


von Heiko (Gast)


Lesenswert?

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 
:)

von Jim M. (turboj)


Lesenswert?

Die Leerzeichen hinter den "=" sehen bedenklich aus - probiere es mal 
OHNE diese Leerzeichen.

von Heiko (Gast)


Lesenswert?

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

von T.roll (Gast)


Lesenswert?

Heiko schrieb:
> Bin
> normal unter Linux beheimatet, daher sind Windows Internas eher Neuland
> :)

Deswegen eine Frage: Warum willst du diese Folter dann unbedingt machen?

von Heiko (Gast)


Lesenswert?

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.

von Mox (Gast)


Lesenswert?

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?

von Johannes S. (Gast)


Lesenswert?

Da dürfte Mox richtig liegen. Wenn es ein Standardprogramm ist, dann 
hilft der NSSM: http://nssm.cc/

von Heiko (Gast)


Lesenswert?

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?

von Johannes S. (Gast)


Lesenswert?

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.

von Mox (Gast)


Lesenswert?

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.

von Heiko (Gast)


Lesenswert?

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?

von Mario M. (thelonging)


Lesenswert?

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.

von Johannes S. (Gast)


Lesenswert?

@Heiko: warum stellst du nur Fragen und liest die Antworten nicht?

von Heiko (Gast)


Lesenswert?

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.

von Johannes S. (Gast)


Lesenswert?

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.

von ClosedBSD (Gast)


Lesenswert?

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.

von Heiko (Gast)


Lesenswert?

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.

von guest (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.