Hallo zusammen,
ich bin neu hier im Forum angemeldet, habe allerdings schon einige nützliche Threads und Skripte in der Vergangenheit gelesen.
Da ich aber jetzt allein nicht mehr weiter komme benötige ich eure Hilfe.
Ich habe für ein Selbstgeschriebenes Datensicherungsprogramm (auf Snapshot Basis) einen Dienst geschrieben, welcher die Sicherung zur jeweiligen Zeit am entsprechenden Tag anstößt.
Ich weiss man hätte das auch über den Taskplaner machen können, aber ich wollte die Konfiguration komplett in meiner eigenen GUI abbilden.
Der Dienst den ich dazu geschrieben habe ist auf Basis der "services.au3" die hier im Forum auch schon vorgestellt wurde.
Der Dienst funktioniert im Prinzip auch so wie er sollte (installieren / starten / stoppen / deinstallieren) und er startet auch die Sicherung zur angegebenen Zeit.
Das Problem was ich habe ist, das der Dienst manchmal mit 100% CPU Last (oder 50% bei Dualcore etc.) läuft und der gesamte Rechner lahm wird.
Ich vermute ich mache bei Initialisieren des Dienstes noch etwas falsch...
Ich werde jetzt erstmal nur die _svc_main() Funktion posten, da der gesamte Code von mir (ausser Installation und Deinstallation) in dieser Funktion steht.
Solltet ihr noch mehr Quelltext brauchen, dann kann ich den sicherlich noch nachreichen.
Ich hoffe ich habe nicht allzuviel falsch gemacht
Spoiler anzeigen
Func _Svc_Main()
main_init()
local $config= @ScriptDir & "\config.ini"
local $runsnap
logPrint("main start")
logPrint("main loop. evnt=" & _WinAPI_WaitForSingleObject($service_stop_event, 0))
While $gServiceStateRunning
if FileExists($config) Then
local $Szeit=IniRead($config,"Client","Sicherungszeit","")
local $Styp=IniRead($config,"Client","Intervalltyp","")
local $STage=IniRead($config,"Client","Wochentage","")
local $dayarray , $aktweekday
local $mo, $di, $mi, $do, $fr, $sa, $so
$szeit=StringSplit($szeit,":",2)
$szeit[1]=Stringleft($szeit[1],2)
if NOT StringInStr($STage,",") = 0 Then
$dayarray = StringSplit($STage,",",2)
for $i=0 to UBound($dayarray)-1 step 1
Select
case $dayarray[$i] = 1
$mo = 2
case $dayarray[$i] = 2
$di = 3
case $dayarray[$i] = 3
$mi = 4
case $dayarray[$i] = 4
$do = 5
case $dayarray[$i] = 5
$fr = 6
case $dayarray[$i] = 6
$sa = 7
case $dayarray[$i] = 7
$so = 1
EndSelect
Next
Else
Select
case $STage = 1
$mo = 2
case $STage = 2
$di = 3
case $STage = 3
$mi = 4
case $STage = 4
$do = 5
case $STage = 5
$fr = 6
case $STage = 6
$sa = 7
case $STage = 7
$so = 1
EndSelect
EndIf
Select
case $Styp="Manuell" or $Styp="Wöchentlich"
if @WDAY=$mo or @WDAY=$di or @WDAY=$mi or @WDAY=$do or @WDAY=$fr or @WDAY=$sa or @WDAY=$so then
if @HOUR = $szeit[0] Then
if @min = $szeit[1] Then
$runsnap=run(@ScriptDir & "\Komplettsicherung.exe start",@ScriptDir)
logPrint("main Snapshot " & $runsnap)
sleep(60000)
EndIf
EndIf
EndIf
Sleep(10000)
case $Styp="Monatlich"
if @MDAY>0 AND @mday<8 Then
$aktweekday = _DateToDayOfWeek(@year, @MON, @mday)
if $aktweekday=$mo or $aktweekday=$di or $aktweekday=$mi or $aktweekday=$do or $aktweekday=$fr or $aktweekday=$sa or $aktweekday=$so then
if @HOUR = $szeit[0] Then
if @min = $szeit[1] Then
$runsnap=run(@ScriptDir & "\Komplettsicherung.exe start",@ScriptDir)
logPrint("main Snapshot " & $runsnap)
sleep(60000)
EndIf
EndIf
EndIf
EndIf
Sleep(10000)
EndSelect
EndIf
WEnd
logPrint("main outer. evnt=" & _WinAPI_WaitForSingleObject($service_stop_event, 0))
_Service_Cleanup()
logPrint("main stopped.")
EndFunc ;==>main
Grüße
Daniel