Skript zur Behebung des Downloadproblems

brooker

F@H Team #70335 Event Manager
Skript zur Lösung des aktuellen Downloadproblems:

-------------------------------------------------------------------------------------------------
... by team members of folding team PC Games Hardware - 70335 - GERMANY

Credits to 70335-team members brooker, mattinator and foldinghomealone for inspiration and coding

Special thanks to all folders
-------------------------------------------------------------------------------------------------​

Voraussetzung:

- die Foldingsoftware muss so installiert sein, dass sie automatisch bei Neustart gestartet wird (ob aktiv oder Pause ist egal)

- das Skript muss in den Autostart eingebunden werden

- kein Windows Startpasswort (kann mit Passwort funktionieren, habe ich aber noch nicht getestet)

- weitere Hinweise sind im Script selbst hinterlegt


Funktionsweise:

Das Skript prüft, ob der Prozess FAHCore.exe läuft. Wenn nicht, wird der Rechner neu gestartet. Die Wartezeit zwischen den Prüfungen können vom Benutzer verändert werden.

Bitte den Inhalt des Spoilers in einen Editor, wie bspw. Notepad, hineinkopieren und unter Team70335_downloadfix_v1.bat abspeichern. Danach diese .bat-Datei in den Windows Autostart einbinden. Den Rechner neu starten und fertig. Bitte prüfen, ob die Batch nach dem Neustart wirklich anläuft. Es müsste sich ein Fenster öffnen.

REM ---------------------------------------------------------------------
REM
REM Team70335_downloadfix_v1.bat
REM
REM Windows-script to reboot PC after inactivity of FAHclient for Windows 7/10
REM
REM by team members of folding team PC Games Hardware - 70335 - GERMANY
REM
REM Credits to 70335-team members brooker, mattinator and foldinghomealone for inspiration and coding
REM
REM Special thanks to all folders
REM
REM -----------------------------------------------------------------------
REM -----------------------------------------------------------------------
REM
REM
REM How To
REM 1. FAH Client needs to be autostarted after boot
REM 2. Script needs to be autostarted after boot
REM 3. Script needs to be modified user-specific --> after 'How To'
REM
REM -----------------------------------------------------------------------

set logdir=%UserProfile%\AppData\Roaming\FAHClient
REM Directory for log file

set /A WUdownloadtime=60
REM Extend time if download of a WU takes longer than 60sec

set /A timerepeat=300
REM Sets intervall in which check is performed

set fahprocess="FahCore_2"
REM Set priority of folding slots
REM "FahCore_2" is default. It checks if (at least one) GPU-slot is folding. If not, reboot
REM "FahCore_A" checks if (at least one) CPU-slot is folding. If not, reboot
REM "FahCore_" checks if (at least one) GPU- or (at least one) GPU-slot is folding, which means that reboot is initiated only if both CPU and GPU are not folding
REM For mulit-GPU systems: it reboots only if all slots are not folding

REM -----------------------------------------------------------------------

REM Config Verzeichnis wird geöffnet // Config directory opened for log file
cd /d %logdir%

echo.
echo Wartezeit nach Booten
echo Waiting time after reboot
echo.
timeout /T 60
FAHCLIENT --send-unpause


echo. >>team70335_downloadfix.log
echo %date% %time:~0,8% Prüfroutine gestartet // Checking starts >>team70335_downloadfix.log
echo %date% %time:~0,8% Credits to 70335-team members brooker, mattinator and foldinghomealone >>team70335_downloadfix.log
echo %date% %time:~0,8% Special thanks to all folders >>team70335_downloadfix.log
echo. >>team70335_downloadfix.log

:START
echo.
echo Prüfen ob der Prozess %fahprocess% aktiv ist
echo Checking if process %fahprocess% is acitve
echo.

tasklist | findstr %fahprocess%
IF ERRORLEVEL 1 ( GOTO :WIEDERHOLEPRFNG ) ELSE ( GOTO :VONANFANGAN )


:WIEDERHOLEPRFNG
echo.
echo %fahprocess% ist nicht aktiv. Wiederholte Prüfung in 60sec. Falls dann immer noch nicht, NEUSTART
echo %fahprocess% not active. Repeated check in 60sec. If still not active, reboot is initiated
echo.
timeout /T %WUdownloadtime%

tasklist | findstr %fahprocess%
IF ERRORLEVEL 1 ( GOTO :NEUSTART ) ELSE ( GOTO :VONANFANGAN )


:VONANFANGAN
echo.
echo Prozess %fahprocess% ist aktiv.
echo Process %fahprocess% is active.
echo.
REM In 300 Sekunden erfolgt eine erneute Abfrage ob der Prozess läuft. Der Wert kann nach Bedarf angepasst werden.
REM Repeat check every 300sec. Value can be adjusted
echo %date% %time:~0,8% Falten aktiv // Folding active >>team70335_downloadfix.log
timeout /T %timerepeat%

goto :START


:NEUSTART
echo.
echo Neustart eingeleitet
echo Reboot initiated
echo.
echo %date% %time:~0,8% Neustart eingeleitet // Reboot initiated >>team70335_downloadfix.log

shutdown /r /f



Happy Folding.

Grüße
brooker
 
Zuletzt bearbeitet:
@foldinghomealone: ich denke, dass deine Prüfroutine des Logs genutzt werden kann und sobald der Download finish bestätigt ist, dann greift mein Skript. Bedeutet, nicht benötigte Passagen müssten gelöscht, Sprungmarken angepasst und das neue Script eingebunden werden. Oder wo siehst du die Knackpunkte?
 
Eine wichtige Frage von einem "nicht so Skript-Erfahrenen"

Die Zeile shutdown /g führt doch zu einem Neustart
Aber ein Login ins Windows ist doch trotzdem noch nötig - oder??
 
Eine wichtige Frage von einem "nicht so Skript-Erfahrenen"

Die Zeile shutdown /g führt doch zu einem Neustart
Aber ein Login ins Windows ist doch trotzdem noch nötig - oder??

... wenn du dein Windowsstart mit nem Passwort versehen hast ... muss ich prüfen. Denn ich nutze keines, weil es nix wert ist ;)
 
BB: Was meinst du mit "Aber ein Login ins Windows ist doch trotzdem noch nötig - oder??"

Ja, er bleibt dann beim Login-Fenster stehen und wartet auf die PW-Eingabe.
Programme, die eine manuelle Interaktion benötigen werden erst nach PW-Eingabe gestartet.

Über den Scheduler kann man Programme oder Skripte triggern, so dass sie trotzdem gestartet werden.

(Wie das Ganze bei verschiedenen benutzen Logins funktioniert, weiß ich nicht).
 
Geht es nicht ohne Neustart?

Eventuell Internet neu verbinden?

ipconfig /renew
timeout 10

anschließend F@h starten

"C:\Program Files (x86)\FAHClient\HideConsole.exe"
"C:\Program Files (x86)\FAHClient\FAHClient.exe"

oder so ähnlich?
 
Brooker, ich konnte dein Skript noch nicht testen .

Single-GPU-Setup:
Ich denke, es hat einen kleinen Fehler/Unschönheit.
Es könnte sein, dass das Skript genau zu dem Zeitpunkt prüft, wenn es einen regulären und funktionsfähigen Download durchführt. Dann dürfte der Prozess auch nicht aktiv sein.
Und dann würde dein Skript sofort runterfahren.
Das wäre aber doof bzw. kostet die Zeit für einen Neustart.

Man müsste daher die Prüfroutine ein zweites Mal wiederholen, z.B. nach 30-60 Sekunden (je nach normaler Downloaddauer für eine WU) und erst dann den Shutdown durchführen.

Multi-GPU-Setup:
Es dürfte sehr unwahrscheinlich sein, dass beide gleichzeitig einen (korrekten) Download durchführen genau dann wenn die Prüfroutine gestartet hat und daher dürfte das Skript hierfür sehr gut geeignet sein.

Allerdings prüft das Skript auf den Prozess FAH21... D.h. wenn eine WU im Download hängt, wird mit dem Neustart erst gewartet bis der Prozess FAH21... beendet wurde, also bis die zweite WU fertigberechnet wurde.
Da kann dann schon einige Zeit vergehen bis der Neustart durchgeführt wurde.

Das ist nicht so schön, aber mir fällt jetzt nicht wirklich ein, wie man prüfen könnte, ob es zwei FAH21... Prozesse aktiv sind
 
Zuletzt bearbeitet:
... für Single GPUs funktioniert das. Man muss halt die Prüfzeit so lange wählen, dass finish Upload und download möglich sind. Bei mir reichen 5 min dafür aus. Man muss sein System und die WUs dafür gut kennen. Eleganter ist dafür die Abfrage/Überwachung der Logs. Die Fehlerwahrscheinlichkeit sinkt dadurch.
Bei Multi GPU reicht die selbe Prpfroutine meiner Meinung. Klar geht was verloren, aber einen Tot kann man nur sterben. Eleganter wäre es, wenn man auf das "Finshen" und "Abload ready" der zweiten GPU wartet und danach erst neu startet. Aber auch hier kann es dann sein, dass man stundenlang mit einer GPU nicht faltet
 
Versteh ich nicht...

das Skript prüft, ob der FAH21 Prozess aktiv ist. Sobald er das nicht ist, wird wiedergestartet.
Und beim Upload einer WU ist er nicht mehr aktiv. Erst wieder, wenn die neue runtergeladen wurde und das Berechnen gestartet hat.

Trifft man jetzt zufälligerweise dieses Zeitfenster mit der Prüfroutine, wird auf jeden Fall runtergefahren. Evtl. wird das Uploaden unterbrochen, der Download wird auf jeden Fall unterbrochen.

Und das Ganze hat nichts mit den 5 Minuten zu tun. (außer dass diese Wahrscheinlichkeit sinkt, je länger die Zeitspanne ist).


Ein kleines Beispiel:
16:18:34:WU01:FS00:0x21:Completed 12000000 out of 12500000 steps (96%)
16:20:56:WU01:FS00:0x21:Completed 12125000 out of 12500000 steps (97%)
16:23:18:WU01:FS00:0x21:Completed 12250000 out of 12500000 steps (98%)
16:25:40:WU01:FS00:0x21:Completed 12375000 out of 12500000 steps (99%)
16:28:01:WU01:FS00:0x21:Completed 12500000 out of 12500000 steps (100%)
16:28:02:WU00:FS00:Connecting to 65.254.110.245:8080
16:28:02:WU01:FS00:0x21:Saving result file logfile_01.txt
16:28:02:WU01:FS00:0x21:Saving result file checkpointState.xml
16:28:02:WU01:FS00:0x21:Saving result file checkpt.crc
16:28:03:WU00:FS00:Assigned to work server 155.247.166.220
16:28:03:WU01:FS00:0x21:Saving result file log.txt
16:28:03:WU00:FS00:Requesting new work unit for slot 00: RUNNING gpu:0:GP102 [GeForce GTX 1080 Ti] 11380 from 155.247.166.220
16:28:03:WU01:FS00:0x21:Saving result file positions.xtc
16:28:03:WU00:FS00:Connecting to 155.247.166.220:8080
16:28:03:WU01:FS00:0x21:Folding@home Core Shutdown: FINISHED_UNIT
16:28:03:WU01:FS00:FahCore returned: FINISHED_UNIT (100 = 0x64)
16:28:03:WU01:FS00:Sending unit results: id:01 state:SEND error:NO_ERROR project:14180 run:1 clone:654 gen:10 core:0x21 unit:0x0000000e0002894c5d3b546308342718
16:28:03:WU01:FS00:Uploading 14.60MiB to 155.247.166.220
16:28:03:WU01:FS00:Connecting to 155.247.166.220:8080
16:28:03:WU00:FS00:Downloading 15.58MiB
16:28:09:WU00:FS00:Download 25.28%
16:28:09:WU01:FS00:Upload 19.26%
16:28:15:WU00:FS00:Download 86.26%
16:28:15:WU01:FS00:Upload 47.93%
16:28:16:WU00:FS00:Download complete
16:28:16:WU00:FS00:Received Unit: id:00 state:DOWNLOAD error:NO_ERROR project:14180 run:5 clone:528 gen:6 core:0x21 unit:0x0000000e0002894c5d3b5510442565b4
16:28:16:WU00:FS00:Starting
16:28:16:WU00:FS00:Running FahCore: "C:\Program Files (x86)\FAHClient/FAHCoreWrapper.exe" C:\Users\MK\AppData\Roaming\FAHClient\cores/cores.foldingathome.org/Win32/AMD64/NVIDIA/Fermi/Core_21.fah/FahCore_21.exe -dir 00 -suffix 01 -version 705 -lifeline 8980 -checkpoint 15 -gpu-vendor nvidia -opencl-platform 0 -opencl-device 0 -cuda-device 0 -gpu 0
16:28:16:WU00:FS00:Started FahCore on PID 6876
16:28:16:WU00:FS00:Core PID:4180
16:28:16:WU00:FS00:FahCore 0x21 started
16:28:16:WU00:FS00:0x21:*********************** Log Started 2019-09-28T16:28:16Z ***********************

Zwischen 16:28:02 und 16:28:16 ist der FAH21-Prozess nicht aktiv. Startet da zufällig die Prüfroutine wird neu gestartet.
Die Zeit kann aber auch deutlich länger sein, bei jemanden, der eine langsame Internetverbindung hat und/oder eine große WU runterlädt.

-

Bei Multi bin in deiner Meinung. Nur dachte, ich man könnte vielleicht eine Routine entwickeln, die prüft, ob nur ein Prozess aktiv ist (anstatt z.B. 2) und entscheidet dann zur Pausieren und dann neuzustarten.
Dann würden einige Prozent der berechneten WU verloren gehen, aber man müsste nicht stundenlang für die neue WU warten.
 
Zuletzt bearbeitet:
... ja, natürlich, da hast du Recht und ich bin mir dessen auch bewusst. Deswegen möchte ich ja gern mit Teilen deines Skriptes arbeiten, damit diese Lücke geschlossen wird.
Hab ich nicht sauber rübergebracht. Sorry.
 
Bei meinem Skript dürfte es aber nicht so einfach sein, weil es die letzte Zeile auf eine bestimmte Zeichenkette überprüft.

Bei dem Downloadproblem kenn ich aber die Zeichenkette nicht und wie es sich bei einem Multi-GPU-Setup verhält weiß ich auch nicht.

Deshalb mein Vorschlag bei deinem Skript die Prüfroutine zu wiederholen.
Irgendwie so:
@echo off
:start
REM Prüfen ob der Prozess FahCore_21 läuft
tasklist | findstr "FahCore_21.exe"

IF ERRORLEVEL 1 GOTO wiederholprfng
ELSE GOTO vonanfangan

:wiederholprfng
timeout 60
REM nach 60 Sekunden wird Prüfung wiederholt

tasklist | findstr "FahCore_21.exe"

IF ERRORLEVEL 1 GOTO neustart
ELSE GOTO vonanfangan

:neustart
echo FahCore_21.exe nicht aktiv. Neustart wird sofort eingeleitet!
shutdown /r

:vonanfangan
echo Die Core_21.exe ist aktiv, alles in Ordnung!

REM In 300 Sekunden erfolgt eine erneute Abfrage ob der Prozess läuft.
REM Der Wert kann ebenfalls nach Bedarf angepasst werden.
timeout 300

goto start

Ich kann es aber nicht prüfen, weil mein Rechner noch faltet...
 
... ich kann es derzeit auch nicht prüfen, bin verhindert. Ich denke die Woche darauf rum und probiere ein paar Sachen. Bekommen das schon save!

Wenn der Restart um 5min verzögert wird, sollte es schon reichen.
 
Zuletzt bearbeitet:
Hab das Skript angepasst und geprüft.

@echo off
REM PC Script to reboot after inactivity of FAHclient for Windows
REM by brooker and foldinghomealone - 2019/09 - team PC Games Hardware - 70335
REM
REM Change log
REM -
REM

REM ________________

REM Unpause FahClient
REM Wird benötigt, falls der Client beim Windowsstart normalerweise nicht falten soll
REM Hier muss aber aber falten, sonst macht das Skript bzw. der Neustart des Rechners keinen Sinn

REM es wird erstmal 30 Sekunden gewartet, so dass sichergestellt ist, dass der Client nach Neustart gestartet wurde bevor das Unpause-Signal gesendet wird
timeout /T 30 /NOBREAK
FAHCLIENT --send-unpause

REM dann wird nochmal 30 Sekunden gewartet, bevor die erste Prüfroutine gestartet wird.
timeout /T 30 /NOBREAK

echo %date% %time% Prüfroutine gestartet >>fah_skript.log

:START

echo.
echo Prüfen ob der Prozess FahCore_2x läuft
tasklist | findstr "FahCore_2"


IF ERRORLEVEL 1 ( GOTO :WIEDERHOLEPRFNG ) ELSE ( GOTO :VONANFANGAN )

:WIEDERHOLEPRFNG
REM nach 60 Sekunden wird Prüfung wiederholt

echo.
echo FahCore_2x.exe ist nicht aktiv. Wiederholte Prüfung in 60sec.
echo Falls dann immer noch nicht aktiv, wird Neustart durchgeführt.
timeout /T 60 /NOBREAK

tasklist | findstr "FahCore_2"


IF ERRORLEVEL 1 ( GOTO :NEUSTART ) ELSE ( GOTO :VONANFANGAN )

:NEUSTART
echo.
echo FahCore_2x.exe ist nicht aktiv. Neustart wird sofort eingeleitet!
echo %date% %time% Neustart durchgeführt >>fah_skript.log
shutdown /r /f


:VONANFANGAN
echo.
echo FahCore_2x.exe ist aktiv, alles in Ordnung!
echo Wird eine Taste gedrückt, wird die Prüfung sofort wiederholt und nicht bis Ablauf des Timers gewartet
REM In 300 Sekunden erfolgt eine erneute Abfrage ob der Prozess läuft.
REM Der Wert kann ebenfalls nach Bedarf angepasst werden.
timeout /T 300

goto :START

Fehler bzw. Verbesserungsvorschläge bitte melden.
 
Zuletzt bearbeitet:
... JT hatte gerade mitgeteilt, dass er bei einem Downloadhänger nur sein FritzWlan Stick neugestartet hat und es dann weiter ging. Sprich, evtl. reicht es wirklich die Anbindung neu zu starten.
 
Skript geändert.
Falls Prozess nicht aktiv wird IP neu zugewiesen. Falls dann immer noch nicht aktiv wird Reboot durchgeführt.

@echo off
REM PC Script to reboot after inactivity of FAHclient for Windows
REM by brooker and foldinghomealone - 2019/09 - team PC Games Hardware - 70335
REM
REM Change log
REM IP /release and /renew added before reboot
REM

REM ________________

REM Unpause FahClient
REM Wird benötigt, falls der Client beim Windowsstart normalerweise nicht falten soll
REM Hier muss aber aber falten, sonst macht das Skript bzw. der Neustart des Rechners keinen Sinn

REM es wird erstmal 30 Sekunden gewartet, so dass sichergestellt ist, dass der Client nach Neustart gestartet wurde bevor das Unpause-Signal gesendet wird
timeout /T 30 /NOBREAK
FAHCLIENT --send-unpause

REM dann wird nochmal 30 Sekunden gewartet, bevor die erste Prüfroutine gestartet wird.
timeout /T 30 /NOBREAK

echo %date% %time% Prüfroutine gestartet >>fah_skript.log

:START

echo.
echo Prüfen ob der Prozess FahCore_2x läuft

tasklist | findstr "FahCore_2"
IF ERRORLEVEL 1 ( GOTO :WIEDERHOLEPRFNG ) ELSE ( GOTO :VONANFANGAN )


:WIEDERHOLEPRFNG
REM nach 60 Sekunden wird Prüfung wiederholt

echo.
echo FahCore_2x.exe ist nicht aktiv. Wiederholte Prüfung in 60sec.
echo Falls dann immer noch nicht aktiv, wird IP neu zugewiesen.
timeout /T 60 /NOBREAK

tasklist | findstr "FahCore_2"
IF ERRORLEVEL 1 ( GOTO :IPNEUZUWEISUNG ) ELSE ( GOTO :VONANFANGAN )

REM Falls jemand gleich neubooten will statt die IP neu zuzuweisen, dann auf :NEUSTART springen statt auf :IPNEUZUWEISUNG
REM IF ERRORLEVEL 1 ( GOTO :NEUSTART ) ELSE ( GOTO :VONANFANGAN )


:IPNEUZUWEISUNG
echo.
echo FahCore_2x.exe ist nicht aktiv. IP wird neu zugewiesen
echo %date% %time% IP neu zuweisen >>fah_skript.log

ipconfig /release
timeout /T 5
ipconfig /renew

GOTO :WIEDERHOLEPRFNG2


:WIEDERHOLEPRFNG2
REM nach 60 Sekunden wird Prüfung wiederholt

echo.
echo IP wurde neu zugewiesen. Wiederholte Prüfung ob FahCore_2x.exe aktiv ist in 60sec.
echo Falls dann immer noch nicht aktiv, wird Neustart durchgeführt.
timeout /T 60 /NOBREAK

tasklist | findstr "FahCore_2"
IF ERRORLEVEL 1 ( GOTO :NEUSTART ) ELSE ( GOTO :VONANFANGAN )


:NEUSTART
echo.
echo FahCore_2x.exe ist nicht aktiv. Neustart wird sofort eingeleitet!
echo %date% %time% Neustart durchgeführt >>fah_skript.log
shutdown /r /f


:VONANFANGAN
echo.
echo FahCore_2x.exe ist aktiv, alles in Ordnung!
echo Wird eine Taste gedrückt, wird die Prüfung sofort wiederholt und nicht bis Ablauf des Timers gewartet
REM In 300 Sekunden erfolgt eine erneute Abfrage ob der Prozess läuft.
REM Der Wert kann ebenfalls nach Bedarf angepasst werden.
timeout /T 300

goto :START
 
... hab es mal durchlaufen lassen, IP wurde bei nicht aktivem *21.exe erneuert. Funkt. Warte nun auf den nächsten Downloadfehler und teste es dann am lebenden Objekt.
 
Zurück