Autor Thema: shutdown restart unter Windows  (Gelesen 12596 mal)

Offline cotecmania

  • Sr. Member
  • ****
  • Beiträge: 537
shutdown restart unter Windows
« am: 28 Oktober 2013, 21:42:35 »
Hallo,

Unter windows scheint der restart nicht zu funktionieren.
Bei "shutdown restart" wird zwar die Console beendet aber nicht wieder neu gestartet.

Eine Installation als Dienst (runassrv) und dort die Konfiguration mit einem automatischen Restart funktioniert auch nicht.
Der Dienst bleibt als gestartet weiterhin vorhanden

Kennt jemand ne Lösung ?

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Offline Joachim

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1460
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Offline cotecmania

  • Sr. Member
  • ****
  • Beiträge: 537
Antw:shutdown restart unter Windows
« Antwort #2 am: 28 Oktober 2013, 22:51:12 »
Der Link bringt mich zur Übersicht "Server-Windows" ???
Hab die Suchfunktion benutzt aber nix gefunden
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Offline Joachim

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1460
Antw:shutdown restart unter Windows
« Antwort #3 am: 28 Oktober 2013, 23:04:56 »
Sind nur 18 Treads, Überschriften lesen, Lösung finden

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 919
Antw:shutdown restart unter Windows
« Antwort #4 am: 29 Oktober 2013, 17:36:12 »
Hallo,

Ich starte FHEM über eine CMD-Datei und habe fhem.pl so geändert dass beim Aufruf von 'shutdown restart' ein anderer Exit-Code als bei einem einfachen 'shutdown' zurückgegeben wird. In der CMD-Datei prüfe ich den Exit-Code und starte FHEM neu wenn nötig.

Mit dem Dienst habe ich es noch nicht probiert, hier kann ich nichts dazu sagen.

Grüße,

ChrisD

Offline Joachim

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1460
Antw:shutdown restart unter Windows
« Antwort #5 am: 29 Oktober 2013, 17:40:34 »
Moin ChrisD,
geht doch.

Bei dieser Lösung bitte daran denken, dass die Änderung neu eingespielt werden muss, wenn die fhem.pl aktualisiert wird.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 919
Antw:shutdown restart unter Windows
« Antwort #6 am: 29 Oktober 2013, 18:44:44 »
Hallo,

Es ist schon klar dass man diese Änderung bei jedem Update nachpflegen muss. Ich mache aber nur selten Updates, deshalb stört mich das nicht weiter.

Grüße,

ChrisD

Offline ChrisW

  • Hero Member
  • *****
  • Beiträge: 2129
Antw:shutdown restart unter Windows
« Antwort #7 am: 29 Oktober 2013, 19:36:59 »
Schau mal hier das ist die beste Lösung für mich ;)

http://forum.fhem.de/index.php/topic,10475.msg92981.html#msg92981
Raspberry PI3 mit allem möglichen.

Offline cotecmania

  • Sr. Member
  • ****
  • Beiträge: 537
Antw:shutdown restart unter Windows
« Antwort #8 am: 29 Oktober 2013, 20:28:51 »
Naja den Thread bzw. die "Lösung" habe ich schon gefunden, aber das ist keine Lösung für "shutdown restart" sondern ein Workaround dafuer, der nach dem 8ten mal nicht mehr funktioniert !!!

Wenn dann bitte eine Endlosschleife :

cd c:/Fhem/

:NOCHMAL
perl fhem.pl fhem.cfg
GOTO NOCHMAL

Aber wie gesagt, das ist keine richtige Lösung, denn beim reinen "shutdown" wird auch sofort wieder gestartet.
Und die fhem.pl selbst zu aendern ist quatsch, da fast taeglich updates kommen.

Immer noch auf der Suche nach der sauberen "Lösung" ;-)) ...
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Offline ChrisW

  • Hero Member
  • *****
  • Beiträge: 2129
Antw:shutdown restart unter Windows
« Antwort #9 am: 29 Oktober 2013, 20:39:30 »
Tja danach hab ich auch ewig gesucht ... gibt es wohl nicht ohne umbasteln. Aber nu hab ich nen Raspberry auch schon wegen Presence Modul und muss sagen funktioniert alles besser und schneller.
War einfach zu viel was unter Win nicht mal so eben richtig funktioniert hat.
Raspberry PI3 mit allem möglichen.

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 919
Antw:shutdown restart unter Windows
« Antwort #10 am: 29 Oktober 2013, 23:13:18 »
Hallo,

Im Moment kann 'shutdown restart' unter Windows nur durch eine Änderung in fhem.pl erreicht werden. Die saubere Lösung wäre das Ganze mittels Win32::Process::Create zu realisieren, dabei wäre auch keine externe CMD-Datei mehr nötig.

Bei Interesse kann ich zum Testen eine Funktion für 99_myutils zur Verfügung stellen.

Grüße,

ChrisD

Offline Joachim

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1460
Antw:shutdown restart unter Windows
« Antwort #11 am: 30 Oktober 2013, 07:44:46 »
Moin ChrisD,

http://forum.fhem.de/index.php/topic,9965.0.html
letzter Beitrag. Vielleicht ist das das richtige.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 919
Antw:shutdown restart unter Windows
« Antwort #12 am: 30 Oktober 2013, 11:39:58 »
Hallo,

Der von dir genannte Beitrag ist eine Lösung die zwar funktioniert aber einige Schwachpunkte hat:

- in der HOWTO (http://fhem.de/HOWTO_Windows.html) fehlt der Hinweis dass nicht nur Win32::Daemon installiert sein muss sondern auch Win32::Console
- die Fehlermeldungen die auf der Konsole stehen gehen verloren
- die Restart-Logik ist nicht sauber, der Befehl exec('cmd.exe /C net stop fhem & net start fhem'); in fhem.pl führt dazu dass der Dienst beendet wird bevor der cmd-Befehl überhaupt ausgeführt wird, der 'net stop' Befehl ist somit überflüssig und führt auch zu einer Fehlermeldung (Dienst läuft nicht mehr). Weiterhin wird der Dienst 2 Mal beendet und gestartet wenn man über das Web-Interface den Befehl 'shutdown restart' eingibt (zumindest mit Firefox und IE). Im Logfile sieht das dann so aus:
2013.10.30 11:33:29 4: Connection accepted from FHEMWEB:127.0.0.1:57657
2013.10.30 11:33:29 4: HTTP FHEMWEB:127.0.0.1:57657 GET /fhem&cmd=shutdown+restart
2013.10.30 11:33:29 0: Server shutdown
2013.10.30 11:33:31 1: registering fhem as Windows Service
2013.10.30 11:33:31 1: starting fhem as a service
2013.10.30 11:33:31 1: Including d:/Projekte/Test/fhem-5.5/fhem.cfg
2013.10.30 11:33:31 3: telnetPort: port 7072 opened
2013.10.30 11:33:32 3: WEB: port 8083 opened
2013.10.30 11:33:32 3: WEBphone: port 8084 opened
2013.10.30 11:33:32 3: WEBtablet: port 8085 opened
2013.10.30 11:33:32 2: eventTypes: loaded 0 events from ./log/eventTypes.txt
2013.10.30 11:33:32 1: Including ./log/fhem.save
2013.10.30 11:33:32 3: initialUsbCheck return value: This command is not yet supported on windows
2013.10.30 11:33:32 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no basicAuth attribute. telnetPort has no password/globalpassword attribute.  Restart fhem for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2013.10.30 11:33:32 0: Server started with 9 defined entities (version $Id: fhem.pl 4099 2013-10-22 20:55:35Z rudolfkoenig $, os MSWin32, user SYSTEM, pid 5044)
2013.10.30 11:33:32 4: Connection accepted from FHEMWEB:127.0.0.1:57658
2013.10.30 11:33:32 4: HTTP FHEMWEB:127.0.0.1:57658 GET /fhem&cmd=shutdown+restart
2013.10.30 11:33:32 0: Server shutdown
2013.10.30 11:33:34 1: registering fhem as Windows Service
2013.10.30 11:33:34 1: starting fhem as a service
2013.10.30 11:33:34 1: Including d:/Projekte/Test/fhem-5.5/fhem.cfg
2013.10.30 11:33:34 3: telnetPort: port 7072 opened
2013.10.30 11:33:35 3: WEB: port 8083 opened
2013.10.30 11:33:35 3: WEBphone: port 8084 opened
2013.10.30 11:33:35 3: WEBtablet: port 8085 opened
2013.10.30 11:33:35 2: eventTypes: loaded 0 events from ./log/eventTypes.txt
2013.10.30 11:33:35 1: Including ./log/fhem.save
2013.10.30 11:33:35 3: initialUsbCheck return value: This command is not yet supported on windows
2013.10.30 11:33:35 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no basicAuth attribute. telnetPort has no password/globalpassword attribute.  Restart fhem for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2013.10.30 11:33:35 0: Server started with 9 defined entities (version $Id: fhem.pl 4099 2013-10-22 20:55:35Z rudolfkoenig $, os MSWin32, user SYSTEM, pid 3164)

Ich habe deshalb eine Funktion in 99_myutils hinzugefügt die den Neustart auch unter Windows korrekt durchführt, mit dem neuen cmdalias-Modul müsste es sogar möglich sein bei 'shutdown restart' nicht mehr die Funktion in fhem.pl sondern die in 99_myutils aufzurufen. Damit wäre das Problem für Windows-Benutzer die den Dienst nicht verwenden gelöst ohne dass Änderungen am FHEM-Programmcode nötig wären.

Grüße,

ChrisD

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 919
Antw:shutdown restart unter Windows
« Antwort #13 am: 31 Oktober 2013, 08:59:09 »
Hallo,

Mit dem cmdalias-Modul kann man das Problem unter Windows wie folgt beheben:

- FHEM auf den aktuellen Stand bringen und wenn nötig neu starten
- Win32::Process über cpan installieren falls nicht schon vorhanden (cpan -i Win32::Process)
- folgende Funktion in 99_myutils einfügen
sub
ShutdownRestartWin() {
  if (($^O !~ m/Win/)||($winService->{AsAService})) {
    CommandShutdown(undef,"restart");
  } else {
    DoTrigger("global", "SHUTDOWN", 1);
    Log 0, "ShutdownRestartWin - Server shutdown";
   
    foreach my $d (sort keys %defs) {
      CallFn($d, "ShutdownFn", $defs{$d});
    }

    WriteStatefile();
    unlink($attr{global}{pidfilename}) if($attr{global}{pidfilename});
    eval {
      use Win32::Process;
      my $windir=$ENV{'windir'};
      $windir='c:\windows' if (!defined $windir);
      my $p;
      Win32::Process::Create( $p,$ENV{'windir'}.'\system32\cmd.exe',"/C \"(ping -n 1 -w 3000 1.1.1.1 & $^X $0 $attr{global}{configfile})\"",0,NORMAL_PRIORITY_CLASS,"." );   
      exit(0);
    }
  }
}
- in der FHEM-Kommandozeile 99_myutils neu laden
reload 99_myutils- in der FHEM-Kommandozeile folgendes cmdalias-Objekt anlegen:
define srwin cmdalias shutdown restart AS {ShutdownRestartWin()}- Konfiguration speichern (Save config anklicken)
- in der FHEM-Kommandozeile shutdown restart eingeben zum Neustarten

Da keine FHEM-Dateien geändert werden übersteht die Lösung auch zukünftige Updates.

Grüße,

ChrisD

Offline Spiff

  • Full Member
  • ***
  • Beiträge: 255
Antw:shutdown restart unter Windows
« Antwort #14 am: 10 Dezember 2014, 12:55:26 »
Hi ChrisD,

vielen Dank für diese Lösung!
Ich habe sie gerade eingebaut und sie funktioniert gut mit ActivePerl 32bit unter Windows 7 64bit.

Viele Grüße
Spiff