Startup Script für mit wine gestartetem Dienst

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Startup Script für mit wine gestartetem Dienst

Beitrag von badera » 29.11.2010 22:05:03

Ich möchte ein gewisses Windows Programm[1] mit einem Startup-Skript per wine starten lassen und natürlich auch stoppen können.
Das Problem ist nun, dass vier PIDs entstehen, und mir aber nur eines ins pid-File geschrieben wird. Beim Stoppen wird folglich nur ein Prozess beendet, und nicht alle 4.
Der Aufruf im Startup-Skript:

Code: Alles auswählen

DAEMON=/usr/bin/wine
DESC=nettune
FLAGS=NTSPServMng.exe
NAME=nettune
...
case "$1" in
    ....
    start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet -o -b -m -b -p /var/run/$NAME.pid --exec $DAEMON -- $FLAGS
        ...
    stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet -o -p /var/run/$NAME.pid
        ...
gestartet werden folgende Prozesse:

Code: Alles auswählen

root@opteron:/home/adrian# ps -A | grep wine
 2601 ?        00:00:00 wineserver
 2606 ?        00:00:00 winedevice.exe
root@opteron:/home/adrian# ps -A | grep NT
 2595 ?        00:00:00 NTSPServMng.exe
 2619 ?        00:00:00 WinNTSPDV.exe
In /var/run/nettune.pid steht aber nur

Code: Alles auswählen

root@opteron:/home/adrian# cat /var/run/nettune.pid
2595
Folglich wird beim Aufruf mit stop auch nur der eine dieser vier Prozesse gekillt.

Was muss ich machen, um alle vier PIDs im pid-File zu haben? Oder wie löst man das?

Nebenbei: Warum wird eigentlich bei stop in diesem Fall das File /var/run/nettune.pid nicht gelöscht?

[1]
Es geht um NetTune von Onkyo. Leider bieten diese nur einen Windows Dienst für ihre MP3 Stereoanlage an... dieser Dienst lässt sich aber perfekt mit wine starten - nur habe ich das bisjetzt manuell in einem screen gemacht; das Beenden war also relativ mühsam. Und beenden muss man, um neue Wiedergabelisten zu laden bzw. die Files neu scannen zu lassen.

Besten Dank schon im Voraus für Eure Hilfe!
- Adrian

Methusalix

Re: Startup Script für mit wine gestartetem Dienst

Beitrag von Methusalix » 30.11.2010 00:59:31

Hallo,

ich habe noch nie wine benutzt, deshalb stehen meine Überlegungen vielleicht auf wackeligen Füßen. Aber ich denke, das hier in Deinem Script wirklich voneinander unabhängige Prozesse gestartet werden. Soll heißen, Du kannst hier Nettune (was ich auch nicht kenne) per stop Befehl beenden, ohne das der gestartete wine-Befehl auch beendet wird. Nettune.pid bezieht sich eben nur auf nettune und nicht auf wine. Was sagt denn pstree zur Zugehörigkeit der Prozesse?
Unabhängig davon kannst Du doch in Deinem Script die anderen Prozesse lokalisieren (die Namen werden ja
vermutlich immer gleich sein) und ebenfalls beenden.

Gruß M.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Startup Script für mit wine gestartetem Dienst

Beitrag von rendegast » 30.11.2010 13:09:46

Ungefähr sowas:

Code: Alles auswählen

ps --ppid $(< /var/run/$NAME.pid)
oder einfacher

Code: Alles auswählen

pidof NTSPServMng.exe
pidof WinNTSPDV.exe
Sauberer denke ich mit etwa

Code: Alles auswählen

wine net stop WinNTSPDV
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Re: Startup Script für mit wine gestartetem Dienst

Beitrag von badera » 11.12.2010 17:00:53

Danke euch allen für die Tipps - Exgüsee für die späte Antwort...

Leider gibt pstree nicht zuverlässig alle Abhängigkeiten aus.
Ich habe jetzt die Lösung: Alles in einem "screen" starten und gleich ein "deteach" auslösen, dann das PID des screens speichern. Beim Beenden das PID des screens abschiessen. Dann wird alles sauber geschlossen, inkl. .exe Dateien und wine und wineserver.

Antworten