Upload Traffic überwachen > wenn zu gering > batch ausführen



  • PMs sind hier aus gutem Grund deaktiviert 😉

    Seh es als Freundschaftsdienst, für sowas sind Foren da.

    Wenn du unbedingt Geld los werden möchtest, kannst du den Kaffebetrag gerne an eine gemeinnützige Organisation spenden.



  • @Schlangenmensch sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    while ($clock.elapsed -lt $timer){
        $wmi += (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec
        $count++
    }
    

    Ich denke es wäre gut da noch eine "sum" Aggregierung einzubauen und wenigstens etwas wie ein "sleep 100ms".



  • Vielleicht ist es auch noch sinnvoll, sich den letzten Wert zu merken und nur bei fallender Flanke den Prozess neu zu starten?
    Nur für den Fall, dass die Software zum Starten etwas länger braucht und dabei vom Watchdog abgeschossen und neu gestartet wird?



  • @Schlangenmensch
    Vielen Dank dafür.
    Ich habe soeben einen kleinen Betrag an die Deutsche Krebshilfe gespendet.

    @hustbaer
    Danke für deinen Hinweis.
    Was macht ein "sum" Aggregierung?

    Den Begriff Watchdog hab ich in einem anderen Zusammenhang schon mal gehört. Ich hatte damals versucht etwas drüber herauszufinden aber nichts dazu gefunden. Kannst du mir sagen was das genau ist?

    Ich finde es aktuell eigentlich schon nahezu perfekt. Der Batch wird alle 5 Minuten vom Taskplaner ausgeführt. Wenn der Stream nicht läuft, startet er ihn einfach neu... dadurch, dass ich zwei Stream für ein Ziel laufen habe, also einen Backup stream die ganze Zeit mitsende, macht es auch nichts, wenn innerhalb der 5 Minuten einer der Streams abstürzt...

    $threshold = 100
    $timer = new-timespan -Seconds 10
    $wmi = 0
    $count = 0
    $clock = [diagnostics.stopwatch]::StartNew()
    while ($clock.elapsed -lt $timer){
        $wmi += (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec
        $count++
    }
    
    $kbytes = ($wmi/$count)  / 1kb * 8 #to kbit/s 
    
    
    if($kbytes -le $threshold)
    {
        Write-Output $kbytes
        Write-Host "restart"
    	taskkill /f /im obs64.exe
    	Start-Process -FilePath "obs64.exe" -WorkingDirectory "C:\Program Files\obs-studio\bin\64bit\" --startstreaming
    }
    else    
    {
        Write-Output $kbytes
        Write-Host "all ok"
    }
    


  • Achso, wenn das Überwachungsintervall 5min sind, dann ist mein Einwand hinfällig.
    Ein Watchdog ist ein Wachhund, der auf irgendwas aufpasst und Alarm schlägt, wenn etwas nicht so ist, wie es sein sollte. In deinem Fall ist das Skript der Watchdog, der guckt regelmäßig auf den Upstream-Durchsatz und schlägt Alarm (=startet den Stream neu), wenn der Mindest-Durchsatz unterschritten wurde.

    Was SeppJ noch vorschlagen wollte, wenn hustbaer nicht schneller gewsen wäre, ist, dass dein Skript ja 10 Sekunden lang mit voller CPU Leistung die Daten erfasst. Das ist unnötig und verbraucht sinnlos CPU-Zeit. Um das einzuschränken solltest nach jeder Datenerfassung die CPU kurz abgeben (per Sleep oder so). Wenn du dir das im Task Manager anguckst solltest du einen 10 Sekunden Spike bemerken, wenn dein Skript läuft.


  • Mod

    @DocShoe sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    Was SeppJ meint ist, dass dein Skript ja 10 Sekunden lang mit voller CPU Leistung die Daten erfasst. Das ist unnötig und verbraucht sinnlos CPU-Zeit. Um das einzuschränken solltest nach jeder Datenerfassung die CPU kurz abgeben (per Sleep oder so). Wenn du dir das im Task Manager anguckst solltest du einen 10 Sekunden Spike bemerken, wenn dein Skript läuft.

    Das hätte ich zwar auch eingewendet, aber hier war hustbaer schneller.



  • @DocShoe
    Danke für die Erklärung. Dann hab ich jetzt meinen eigenen Wachhund 😃 Danke.
    Tatsächlich habe ich keinen nennenswerten CPU-Ausschlag bei der 10-sekündigen Ausführung der Batch-Datei.

    Das einzige woran ich jetzt gerade noch rumprobiere ist, dass die Datei nicht ausgeführt wird wenn der Befehl taskkill OBS nicht findet, weil es bereits komplett beendet/abgestüzt war. Aber das finde ich 😉 EDIT: habs...



  • Auf die schnelle zusammengegoogelt:

    $obs = Get-Process obs64.exe -ErrorAction SilentlyContinue
    if ($obs) 
    {
       // Prozess lebt noch
       taskkill /f /im obs64.exe
    }
    


  • Dann hab ich jetzt genau was ich wollte 😃
    Vielen Dank nochmal an alle Mithelfenden 😊
    Die Deutsche Krebsforschung wirds freuen - auch wenns ein Tropfen auf den heißen Stein ist...

    Ein kleine unabhängige Frage hätte ich vielleicht noch...
    Die Batch Datei wird ja jetzt vom Taskplaner aller 5 Minuten ausgeführt. Wenn der Stream jetzt also durch den Watchdog neugestartet wird, dann passiert das nur im Hintergrund als Prozess. Es gibt kein OBS- Fenster.
    Ich weiß dass die Option "Unabhängig von der Benutzeranmeldung ausführen" dafür verantwortlich ist.
    Ich kann aber das Häkchen nicht bei "Nur ausführen, wenn der Benutzer angemeldet ist" setzen, weil, dadurch dass ich über Remote Desktop auf den Streaming PC zugreife, der sich beim Beenden des Zugriffs automatisch abmeldet und der Prozess dann einfach gar nicht aufgeführt würde.
    Lässt sich das verborgene OBS irgendwie wieder in den Vordergrund heben?



  • @DocShoe
    Hatte schon was gefunden was funktiont hat.
    Hab einfach als erste Zeile geschrieben:
    $ErrorActionPreference = "Continue"
    Damit gings direkt schon



  • Du könntest versuchen, den Prozess mit Credentials zu starten, das scheint aber etwas Fummelarbeit zu sein.
    Auf Stack Overflow habe ich das hier gefunden, vllt kannste was damit anfangen.

    Edit:
    Käse, bei der Abmeldung wird dann auch der Prozess beendet.

    Das Problem ist, dass es für jeden Benutzer einen virtuellen Desktop gibt, auf dem die Fenster angezeigt werden, die der jeweilige Benutzer erzeugt hat (also eigentlich die Anwendungen, die mit seinem Benutzerprofil gestartet wurden). Da dein Skript ohne Benutzeranmeldung läuft bekommt es einen System-Desktop, auf den du als anderer Benutzer keinen Zugriff hast.



  • @DocShoe
    Ganz unten in deinem Link könnte vielleicht eine Lösung sein?
    Dort steht, dass Dienste mit eingetragenen Benutzeranmeldeinformationen ausgeführt werden können. Nun ist OBS aber kein Dienst, sondern ein Prozess. Lässt sich ein Prozess vielleicht in einen dafür kreierten Dienst packen?
    Könnte das klappen?



  • @dreamer84 sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    weil, dadurch dass ich über Remote Desktop auf den Streaming PC zugreife, der sich beim Beenden des Zugriffs automatisch abmeldet

    Man kann die RDP-Session auch nur trennen - dann läuft der Desktop weiter.
    Beim spätern Anmelden bekommt man den auch wieder zu sehen.

    Ein Auto-Login beim Systemstart sollte auch möglich sein, so dass gleich der Desktop zu sehen ist.



  • @DirkB
    Danke für deine Hilfe 🙂
    Den Auto-Login hab ich bereits aktiviert. das funktioniert.
    Wenn ich mit meiner RemoteDesktop Session fertig bin, mach ich einfach nur über das Kreuz oben rechts zu. Ich wüsste jetzt gar nicht, dass es verschiende Möglichkeiten gibt RDP zutrennen/schließen....?



  • @dreamer84 Dann wird die Verbindung nur getrennt. Der Nutzer bleibt weiterhin auf dem Remoterechner angemeldet, man sieht allerdings den Bildschirmschoner.

    Wenn man sich wieder remote (oder auch lokal) anmeldet hat man den Desktop mit den laufenden Applikationen wieder.

    Man kann sich auch noch über das Startmenü des Remoterechners abmelden - dann wird der Nutzer auch ausgelogt.
    Ein Neustart des Remotrechners geht über die GUI nicht. Aber per CMD.



  • @DirkB
    Aber wenn der Remote-Nutzer getrennt ist, ich also die Session über das Kreuz schließe, meldet es sich automatisch ab. Das sehe ich daran, dass er beim wiederverbinden kurz den Anmeldebildschirm zeigt. Da ich automatische Anmeldung aktiviert habe kommt das nur kurz, aber in der Zeit wo der Remote-Nutzer abgemeldet ist, ist in meinem Fall ja auch der Desktop-Nutzer abgemeldet. In diesem Fall würde der Taskplaner nicht arbeiten. Hab ich schon ausprobiert...

    NACHTRAG:
    Ich denke ich werde es einfach statt mit RemoteDesktop mal mit Teamviewer oder Google Remote oder sowas versuchen. Da dürfte er sich nicht abmelden...



  • @dreamer84 sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    Aber wenn der Remote-Nutzer getrennt ist, ich also die Session über das Kreuz schließe, meldet es sich automatisch ab.

    Nope. Da wird nur die RDP Verbindung geschlossen. Die lokale Session des Benutzers bleibt weiter bestehen. Sonst würde es auch nicht funktionieren dass OBS weiter läuft wenn du es "normal" (ohne Scheduled Task) startest.

    Das sehe ich daran, dass er beim wiederverbinden kurz den Anmeldebildschirm zeigt.

    Das bedeutet nur dass die lokale Session gesperrt wurde.



  • @dreamer84 sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    @Schlangenmensch
    Vielen Dank dafür.
    Ich habe soeben einen kleinen Betrag an die Deutsche Krebshilfe gespendet.

    @hustbaer
    Danke für deinen Hinweis.
    Was macht ein "sum" Aggregierung?

    Ich meine damit die potentiell mehreren Werte die von (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec zurückgegeben werden können zu summieren. (Du bekommst mehrere Werte wenn du mehr als ein Netzwerk-Interface hast.)

    Sollte so gehen:

    $wmi += (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec | Foreach {$sum = 0} {$sum += $_} {$sum}
    

Anmelden zum Antworten