Kristan ympäristönäkemysten innoittamana koitan vähentää palvelimen virran käyttöä niin paljon kuin mahdollista. Home Server nukkuu silloin kun sitä ei tarvita. Käytännössä Home Server herää automaattisesti vain kun joku käyttää X60s läppäriä tai jos Krista kirjautuu jollekin muista koneista. Minun pitää herättää palvelin käsin ylös. Näin takaan sen että Kristan ei tarvitse välittää koneen herättämisestä, asiat vain toimivat ja kone nukkuu suurimman osan ajasta.
Tämän tempun aikaan saamiseen tarvitaan sopivaa rautaa, eli verkkokortti joka herättää koneen (WOL). Integroitujen korttien kanssa tämä on harvemmin ongelma, erilisten PCI väyläisten korttien kanssa minulla on ollut ongelmia. Luonnollisesti kaikki ajurit pitää olla asennettuna, jotta kone suostuu kiltisti nukkumaan ja heräämään sieltä.
Nukkumisesta ja heräämisestä huolehtii Lightsout niminen lisäosa. Itse olen konfiguroinut sen nukuttamaan koneen 15 minuutin kuluttua siitä kun se ei enää näe muita koneita. Lepotila johon mennään on hibernate. Toisten koneiden heräämisen lisäksi lisäksi kone herättää itsensä joka sunnuntai 12-16, sekä joka tiistai ja torstai 12-13. Olen aikojen saatossa huomannut että Home Server tekee sunnuntaisin levyn siivousoperaatiota, joten siksi kone on hereillä sunnuntaisin. Arkisin kone on hereillä jotta Jungledisk voi tehdä turvakopion koneen tärkeistä tiedostoista Amazonin S3 tallenustilaan.
Tämän lisäksi olen tehnyt skriptin, joka odottaa wake.txt nimistä tiedostoa. Tämän huomatessaan se kytkee Lightsout palvelun pois päältä. Tämän kehitin siksi että voin ottaa etäyhteyden palvelimeen ja helposti kytkeä pois Lightsout palvelun. Mitään järkevää ei ADSL yhteyden yli kopioida 15 minuutissa. 🙂
Skriptini ajetaan 5 minuutin välein. Tämä onnistuu helposti Scheduled Taskin avulla. Luo uusi ajoitettu tehtävä. Velhon asetukset ovat seuraavat:
Haluat ajaa ohjelmaa c:\windows\system32\wscript.exe.
Perform this task: daily
Start time: mitä vain
Perform this task: Every day
Start date: mitä vain
UserID: Administrator ja Home Serverin salasana
Rasti kohtaan “Open Advanced properties for this task when I click Finish.”
Avautuvaan ikkunaan lisää run rivin loppuun skriptin sijainti niin että lopputulos on c:windowssystem32wscript.exe d:scriptslightsout.vbs.
Valitse Schedule tasku ja klikkaa Advanced. Advanced Schedule Options ikkunassa valitse Repeat task. Every -kenttään 5 ja alasveto valikkoon minutes. Duration kohtaan 24 tuntia ja klikuttele OK. Nyt skripti ajetaan 5 minuutin välein maailman tappiin saakka.
Skripti on seuraavanlainen
' ================================================================================= ' ' Script Information ' ' Title: Lightsout add-on ' Author: Juha Leivo ' Version: 1.0 ' - Check if wake.txt exist ' - If so, disable lightsout so the server won't sleep ' - If not, enable lightsout so the server can sleep. ' '================================================================================== wakeFile = "D:\logswake.txt" ' Location of wake file logFile = "D:\logs\lightsout_script.txt" ' If empty, no logging, dir must exist! debugg = 0 ' Debug data to the log file, 0 = no debug data '================================================================================== 'Don't touch! Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Const strComputer = "." 'Create needed objects Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2") 'Check should we do logging or not If logFile <> "" Then On Error Resume Next Set objLog = objFSO.OpenTextFile(logFile, ForAppending) If Err = 53 Then Err.Clear Set objLog = objFSO.CreateTextFile(logFile) Set objLog = Nothing Set objLog = objFSO.OpenTextFile(logFile, ForAppending) End If End If 'Get the service Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='LoService'") status = CheckStatus() If status = "Running" Then If objFSO.FileExists(wakeFile) Then objLog.WriteLine (Now & VbTab & "Disabling lightsout!") SetState("0") Else If debugg Then objLog.WriteLine (Now & VbTab & "Lightsout enabled, no need to disable it.") End if End If Else If objFSO.FileExists(wakeFile) Then If debugg Then objLog.WriteLine (Now & VbTab & "Lightsout disabled, no need to enable it.") End If Else objLog.WriteLine (Now & VbTab & "Enabling lightsout!") SetState("1") End If End If objLog.Close Function CheckStatus() For each objService in colServiceList CheckStatus = objService.State If debugg Then objLog.WriteLine (Now & VbTab & "Service status is " & CheckStatus) End if Next End Function 'if given 0 will stop the service 'anything else starts the service Sub SetState(run) If run = "0" Then For each objService in colServiceList objService.StopService() Next Else For each objService in colServiceList objService.StartService() Next End If End Sub