Avstängning vid paketförsluster

Permalänk

Avstängning vid paketförsluster

Hej,
Jag har nyligen köpt en UPS (APC Back-UPS Pro BR900GI) som är kopplad via USB till min FreeNAS burk. Den burken stänger av sig 90 sekunder efter att strömmen går.
Min arbetsstation sitter på samma UPS-matning. Någon som vet en smidig lösning om hur Win10 kan stängas av automatiskt vid strömavbrott?

Jag tänkte mig att man skulle kunna pinga FreeNAS burken och när det har tappats paket i typ 5 min så initiera en säker avstängning.

Permalänk
Medlem

Är väl egentligen bara å sätta upp heartbeat och trigga ett script vid paketförlust över en viss tid.

Visa signatur

7700K 5.1Ghz @ 1.325V | Asus Maximus IX Formula | Corsair Vengeance Black LPX 32GB 3000Hz | ASUS ROG STRIX GeForce GTX 1080 Ti 11GB OC | 2*Samsung SSD 960 PRO 512GB raid0 | Corsair AX 860i
Ljud - Hörlurar: Hifiman HE-400i | Förstärkare: KingRex | Headquarters HQ-1
DAC: Benchmark DAC1-Pre

Permalänk
Medlem
Visa signatur

| Citera för svar! | Gilla bra inlägg! |

Permalänk

Din lösning består av http://www.apcupsd.org/.

Permalänk
Medlem

@Einar Berg:

Gjorde ett powershell script som kanske funkar

Edit: Gjorde lite småändringar och la till -force på stop-computer så att datorn stänger ned även om man har något osparat på skrivbordet.

$DebugPreference = "Continue" $NetUp = $TRUE $Timeout = New-TimeSpan -Minutes 5 $TestMe = '10.0.1.1' $HoldOffTime = 10 Write-Host -ForegroundColor Yellow "Test-Connection Host = $TestMe Timeout set to $Timeout" while($TRUE) { while ($NetUp) { $NetUp = Test-Connection $TestMe -Quiet Write-Debug "NetUp= $NetUp" if ($NetUp) { Start-Sleep -s $HoldOffTime } } # net went down get timestamp $NetDownTimestamp = Get-Date Write-Warning "Net went down @ $NetDownTimestamp" # wait for net to come back while (!$NetUp) { $NetUp = Test-Connection $TestMe -Quiet if(!$NetUp) { $Now = Get-Date Write-Debug "$Now NetUp= $NetUp" if($Now - $NetDownTimestamp -gt $Timeout) { Write-Warning "Stop-Computer" Stop-Computer -Force exit } Start-Sleep -s $HoldOffTime } } $NetBackTimestamp = Get-Date Write-Warning "Net is back @ $NetBackTimestamp" }

Gamla versionen

$DebugPreference = "Continue" $netup = $TRUE $timeout = New-TimeSpan -Minutes 5 $TestMe = '10.0.1.1' Write-Host -ForegroundColor Yellow "Test-Connection Host = $TestMe Timeout set to $timeout" while($TRUE) { while ($netup){ $netup = Test-Connection $TestMe -Quiet Write-Debug "netup= $netup" } # net went down get timestamp $netDownTimestamp = Get-Date Write-Warning "Net went down @ $netDownTimestamp" # wait for net to come back while (!$netup) { $netup = Test-Connection $TestMe -Quiet $now = Get-Date Write-Debug "$now netup= $netup" $shutDown = $now - $netDownTimestamp -gt $timeout if(!$netup -and $shutdown) { Write-Warning "ShutTheFuckDown" Stop-Computer } Start-Sleep -s 10 } $netBackTimestamp = Get-Date Write-Warning "Net is back @ $netBackTimestamp" }

Permalänk

Tack för alla svar.

@trbo
Jag hittade inte riktigt vad du menade. Det scriptet Snorren gjort har bra funktionalitet.

@BrusE
Det finns inget nätverkskort i UPSen utan bara USB som idag är kopplad till FreeNAS

@the_weird
Jag tror att det är det som FreeNAS använder. Problemet är att skicka vidare till min Win10 burk.
Man skulle nog kunna köra SNMP trap till Win10 men det känns onödigt krångligt.

@Snorren
Det ser intressant ut. Jag testade igår med det gamla scriptet och märkte då att det vart problem med osparade dokument.
Det kanske skulle vara bättre att köra hibernate istället för shutdown? Force shutdown sparar väl ej?
Jag hittade något här. Fick inte till det igår. Testar mer ikväll.

Permalänk
Medlem

Men tappar du inte det osparade ämå med hibernate? Sätt på auto spar i Office och låt UPS'en driva det i 15 minuter och ha autospar på 5 min eller så bör det sparas

Visa signatur

En trött jäkel.

Permalänk

@Dax
Jag testade igår med strömsparläge och sedan dra strömkabeln. Fungerade bra. Längre tid för uppstart men alla program och osparade dokument var öppna.

Permalänk
Skrivet av Einar Berg:

Jag tror att det är det som FreeNAS använder. Problemet är att skicka vidare till min Win10 burk.
Man skulle nog kunna köra SNMP trap till Win10 men det känns onödigt krångligt.

Det är precis därför du använder apcupsd klienten på din win10 burk.
Apcupsd möjliggör nätverkskommunikation så klienterna får ta del av ups händelser också.

I mitt fall har jag ups:en kopplad till min filserver och den kommunicerar sedan med mina 3 andra maskiner som sitter på samma ups.
När ups:en går över på batteri så signallerar den klienterna (via filserverns apcupsd server) som är konfigurerade att stänga ner sig efter 5minuter och efter ytterligare 5minuter stänger filservern ner sig.

Permalänk
Skrivet av the_weird:

Det är precis därför du använder apcupsd klienten på din win10 burk.
Apcupsd möjliggör nätverkskommunikation så klienterna får ta del av ups händelser också.

I mitt fall har jag ups:en kopplad till min filserver och den kommunicerar sedan med mina 3 andra maskiner som sitter på samma ups.
När ups:en går över på batteri så signallerar den klienterna (via filserverns apcupsd server) som är konfigurerade att stänga ner sig efter 5minuter och efter ytterligare 5minuter stänger filservern ner sig.

Ah. Nu är jag med. Jag trodde inte det gick att göra så. Det känns bättre att prata "direkt" med UPSn.
https://ryanclouser.com/2015/07/16/FreeNAS-9-3-UPS-Monitoring...

Permalänk
Medlem

@Einar Berg:

Så nu görs hibernate istället och netdown timestampen uppdateras när man kommer tillbaka så att inte datorn hiberneras det första som händer när man väcker den.

$DebugPreference = "Continue" $NetUp = $TRUE $Timeout = New-TimeSpan -Minutes 5 $TestMe = '10.0.1.1' $HoldOffTime = 10 Write-Host -ForegroundColor Yellow "Test-Connection Host = $TestMe Timeout set to $Timeout" while($TRUE) { while ($NetUp) { $NetUp = Test-Connection $TestMe -Quiet Write-Debug "NetUp= $NetUp" if ($NetUp) { Start-Sleep -s $HoldOffTime } } # net went down get timestamp $NetDownTimestamp = Get-Date Write-Warning "Net went down @ $NetDownTimestamp" # wait for net to come back while (!$NetUp) { $NetUp = Test-Connection $TestMe -Quiet if(!$NetUp) { $Now = Get-Date Write-Debug "$Now NetUp= $NetUp" if($Now - $NetDownTimestamp -gt $Timeout) { #Write-Warning "Stop-Computer" #Stop-Computer -Force Write-Warning "Hibernate-Computer" Start-Process -FilePath 'shutdown.exe' -ArgumentList '-h' $NetDownTimestamp = Get-Date } Start-Sleep -s $HoldOffTime } } $NetBackTimestamp = Get-Date Write-Warning "Net is back @ $NetBackTimestamp" }

Permalänk

@Snorren:
Jag körde såhär med hibernate

Add-Type -AssemblyName System.Windows.Forms $DebugPreference = "Continue" $NetUp = $TRUE $Timeout = New-TimeSpan -Minutes 10 $TestMe = '192.168.0.98' $HoldOffTimeUp = 20 $HoldOffTimeDown = 5 $PowerState = [System.Windows.Forms.PowerState]::Hibernate; $Force = $TRUE; $DisableWake = $FALSE; Write-Host -ForegroundColor Yellow "Test-Connection Host = $TestMe Timeout set to $Timeout" while($TRUE) { while ($NetUp) { $NetUp = Test-Connection $TestMe -Quiet # Write-Debug "NetUp= $NetUp" if ($NetUp) { $Now = Get-Date Write-Debug "$Now NetUp= $NetUp" Start-Sleep -s $HoldOffTimeUp } } # net went down get timestamp $NetDownTimestamp = Get-Date Write-Warning "Net went down @ $NetDownTimestamp" # wait for net to come back while (!$NetUp) { $NetUp = Test-Connection $TestMe -Quiet if(!$NetUp) { $Now = Get-Date Write-Debug "$Now NetUp= $NetUp" if($Now - $NetDownTimestamp -gt $Timeout) { Write-Warning "Stop-Computer" [System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake); } Start-Sleep -s $HoldOffTimeDown } } $NetBackTimestamp = Get-Date Write-Warning "Net is back @ $NetBackTimestamp" }

Såhär blir det då

Test-Connection Host = 192.168.0.98 Time DEBUG: 07/24/2016 12:32:55 NetUp= True DEBUG: 07/24/2016 12:33:18 NetUp= True DEBUG: 07/24/2016 12:33:49 NetUp= True WARNING: Net went down @ 07/24/2016 12:3 DEBUG: 07/24/2016 12:34:40 NetUp= False DEBUG: 07/24/2016 12:34:59 NetUp= False DEBUG: 07/24/2016 12:35:19 NetUp= False DEBUG: 07/24/2016 12:35:39 NetUp= False DEBUG: 07/24/2016 12:36:00 NetUp= False DEBUG: 07/24/2016 12:36:18 NetUp= False DEBUG: 07/24/2016 12:36:38 NetUp= False WARNING: Stop-Computer True WARNING: Net is back @ 07/24/2016 12:39: DEBUG: 07/24/2016 12:39:04 NetUp= True DEBUG: 07/24/2016 12:39:27 NetUp= True DEBUG: 07/24/2016 12:39:50 NetUp= True

Att uppdatera timestamp vid uppstart är nog bra då servern är långsam på att starta.
Jag tror dock att jag skall övergå till att lyssna på UPSen genom servern.

Permalänk
Medlem

@Einar Berg:

Ja låter ju mycket bättre att använda UPS-gränssnitt om det finns.

Slänger med den sista versionen jag har på disken om någon behöver ett dylikt script för ngt annat ändamål, eller som inspiration.

Märkte att det var bra att slänga in en sleep innan man uppdaterar tiden när man kommer tillbaka från hibernate, då man ibland hann uppdatera tiden innan datorn blev hibernatead...

$DebugPreference = "Continue" $NetUp = $TRUE $Timeout = New-TimeSpan -Minutes 5 $TestMe = '10.0.1.1' $HoldOffTime = 10 Write-Host -ForegroundColor Yellow "Test-Connection Host = $TestMe, Timeout = $Timeout, Hold off = $HoldOffTime" while($TRUE) { while ($NetUp) { $NetUp = Test-Connection $TestMe -Quiet Write-Debug "NetUp = $NetUp" if ($NetUp -and $HoldOffTime -gt 0) { Start-Sleep -s $HoldOffTime } } # net went down get timestamp $NetDownTimestamp = Get-Date Write-Warning "Net went down @ $NetDownTimestamp" # wait for net to come back while (!$NetUp) { $NetUp = Test-Connection $TestMe -Quiet if(!$NetUp) { $Now = Get-Date $NetDownTimeSpan = $Now - $NetDownTimestamp Write-Debug "$Now NetUp = $NetUp, Net has been down for $NetDownTimeSpan" if($NetDownTimeSpan -gt $Timeout) { #Write-Warning "Stop-Computer" #Stop-Computer -Force Write-Warning "Hibernate-Computer" Start-Process -FilePath 'shutdown.exe' -ArgumentList '-h' Start-Sleep -s 30 $NetDownTimestamp = Get-Date } else { if ($HoldOffTime -gt 0) { Start-Sleep -s $HoldOffTime } else { # So that the script will not loop like crazy if the network-cable is unplugged or interface is disabled Start-Sleep -s 1 } } } } $NetBackTimestamp = Get-Date Write-Warning "Net is back @ $NetBackTimestamp" }