DIY scheduler windowsiin..

Liittynyt
25.07.2018
Viestejä
542
Mietinnässä olisi saada aikaa pienimuotoinen scheduler jolla ohjata scriptien ajoa hiukan vapaammin kuin windowsin omalla schedulerilla. Voihan olla että tähän on ilmaisiakin (yrityskäyttöön) valmiita ratkaisuja tai jopa että win schedulerilla homma onnistuisi..

Eli jos nyt oikein muistelen niin ohjaustapa olisi jotain tälleen

9:00, f, "scripti1.bat"
10:00, s, "scripti2.bat"
11:00, f, "scripti3"
-, f, "scripti1.bat"
-, f, "scripti1.bat"
12:00, s,"scripti2.bat"
14:00, x,"scripti3.bat"
..

Idea olisi siis että rivi ajettaisiin kellonlyömällä tai jos aika on ylittynyt niin heti kun mahdollista (f, force) tai jos rivillä s (skip) niin ja aika ylittynyt niin siirrytään seuraavaan riviin.
- merkinnällä olevat kuuluisi samaan jonoajoon, eli ne kyllä voisi merkata vaikka 11:01 ja 11:02 tuossa jolloin f parametrin kanssa ne tulis ajettua jonossa.

Voihan olla että tämä on win schedulerin tehokäyttäjille peruskauraa mutta itse en haulla löytänyt mitään hyviä menetelmiä..

Toteutus ajateltu kevyesti poweshellillä tai ihan win komentokehoitteen tarjoaman scriptauksen kautta.

Laajennus tuohon voisi olla joku ehdolisuus jokun scriptin lopputulemasta mutta ei ole juuri nyt ajankohtainen.

Mietteitä?
 
Eikö tuossa Windowsin omassa ole kaikki tarvittavat?

upload_2018-8-30_8-26-20.png
 
No ei minusta.. tuohan koskee vain yhden taskin ajoa (nimetään vaikka task1), ei ota kantaa että onko task2 jo ajettu. Unohdin mainita että tuossa omassa listassa vain yksi scripti voi olla ajossa kerrallaan, toista ei saa tai voi käynnistää jos joku muu on ajossa.. eli tietty jonoajo mekanismi.
 
Aivan, tuohon jonohommaan ei tuo win scheduleri osaa ottaa kantaa muutoin kuin ajastuksilla. Jos ajoja pitää ketjuttaa niin voisi vain ajon (batin) lopussa käskeä käynnistämään se toinen ajo?

Muutoin pitänee tosiaan etsiä fiksumpi ratkaisu.
 
Aivan, tuohon jonohommaan ei tuo win scheduleri osaa ottaa kantaa muutoin kuin ajastuksilla. Jos ajoja pitää ketjuttaa niin voisi vain ajon (batin) lopussa käskeä käynnistämään se toinen ajo?

Muutoin pitänee tosiaan etsiä fiksumpi ratkaisu.

Niin minimissäään voi jono battina toteuttaa mutta tosiaan mietin tuota tiettyjä ajoaikoja ja ehdollisuuttaa että onko ajo vai skippaus riippuen onko aloitusaika mennyt.. noh, on tähän jo runkoa mietitty, lähinnä jos tulee jollai mieleen valmiita tai helpompia ratkaisuja.
 
Jos teet oman wrapper-scriptin noille ja laitat jobit omaan listaan niin pitäisi onnistua. Jobi sitten käynnistymään joka tunti schedulerilla. Jotain tämmöistä:

Koodi:
function Invoke-Script {
    [CmdletBinding()]
    param (
        $ScriptName,
        $Time,
        $RunHour,
        [int]$Skip
    )
    if ($RunHour -eq $Time.Hour) {
        if ($Skip -and $Time.Minute -eq 0 -and $Time.Seconds -eq 0) {
            Write-Debug "Running $ScriptName with $Skip"
            & $ScriptName
        } elseif (!$Skip) {
            Write-Debug "Running script $ScriptName"
            & $ScriptName
        }
    }
}

Import-Csv -Path "C:\folder\jobs.csv" | ForEach-Object {
    Invoke-Script -ScriptName $_.ScriptName -Time (Get-Date) -RunHour $_.RunHour -Skip $_.Skip
}

Koodi:
ScriptName,RunHour,Skip
C:\folder\scripti1.bat,9,1
C:\folder\scripti2.bat,10,0
C:\folder\scripti1.bat,22,0

Nuo skip ajot ovat alttiita kyllä bugeille koska fooreach-looppia ei käsitellä rinnan ja en tiedä kuinka tarkka ajoituksen pitää olla. Jos oikein alkaa hifistelemään niin tuon konfiguraatio-osuuden voi ulkoistaa esim. ulkopuoliseen json-/csv-tiedostoon joka importataan tuonne scriptiin. -> Tehty esimerkkiin.

Edit: Fiksasin vähän koodia ja otin veke ikuisen loopin, koska parempi ajaa tuota aina tasatunnein schedulerilla.
 
Viimeksi muokattu:

Uusimmat viestit

Statistiikka

Viestiketjuista
261 839
Viestejä
4 548 782
Jäsenet
74 851
Uusin jäsen
hieunguyen

Hinta.fi

Back
Ylös Bottom