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

Offline iCure

  • New Member
  • *
  • Beiträge: 31
Antw:shutdown restart unter Windows
« Antwort #15 am: 29 Dezember 2014, 17:12:30 »
Hi ChrisD,

die Lösung funktioniert super, allerdings starte ich seither meinen Server als Dienst. Durch Eingabe von "shutdown restart" wird dieser Dienst beendert, und der Server neu gestartet, allerdings nicht mit dem eigentlich erstellten Dienst.

Durch was läuft das ganze nun, wenn nicht über den eigentlichen Dienst?

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 957
Antw:shutdown restart unter Windows
« Antwort #16 am: 29 Dezember 2014, 22:17:50 »
Hallo,

Wenn du FHEM als Dienst startest ist der Code aus Beitrag 13 nicht nötig. In dem Fall wird der Dienst aus fhem.pl aus gestoppt und neu gestartet.

Ich habe nicht verstanden was du mit
Zitat
allerdings nicht mit dem eigentlich erstellten Dienst
gemeint hast. Ob FHEM als Dienst startet kannst du in der Log-Datei sehen. Als Dienst gibt es den Eintragregistering fhem as Windows Service
Das Neustarten des Dienstes erfolgt allerdings nicht ganz sauber wie in Beitrag 12 beschrieben. Der folgende Code (statt dem aus Beitrag 13) sollte dies beheben:

sub
ShutdownRestartWin() {
if ($^O !~ m/Win/) {
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;
use Win32::Daemon;

my $windir=$ENV{'windir'};
$windir='c:\windows' if (!defined $windir);
print $windir;
my $p;
if (($winService->{AsAService})) {
# use the OS SCM to start the service
Win32::Daemon::State( SERVICE_STOPPED );
Win32::Daemon::StopService();
Win32::Process::Create( $p,$ENV{'windir'}.'\system32\cmd.exe',"x /C \"(ping -n 1 -w 3000 1.1.1.1 & net start fhem)\"",0,NORMAL_PRIORITY_CLASS,"." );
} else {
Win32::Process::Create( $p,$ENV{'windir'}.'\system32\cmd.exe',"x /C \"(ping -n 1 -w 3000 1.1.1.1 & $^X $0 $attr{global}{configfile})\"",0,NORMAL_PRIORITY_CLASS,"." );
}
};
exit(0);
}
}
Damit sollte sowohl die Fehlermeldung
Zitat
Dienst "fhem server" wurde unerwartet beendet. Dies ist bereits x Mal passiert.
in der Ereignisanzeige wie auch das teilweise starten, stoppen und nochmal starten behoben sein.

Grüße,

ChrisD

 

decade-submarginal