systemd

Järgmise põlvkonna Cron koos systemd-ga Taimeri loomine

Järgmise põlvkonna Cron koos systemd-ga Taimeri loomine
Kas peate tulevikus oma arvutis mõne ülesande ajastama? See võib tunduda lihtne - lõppude lõpuks suudab teie nõudepesumasin nupu abil enne käivitamist oodata, kuid mõnikord teevad arvutid nii lihtsaid ülesandeid nii raske.Kuid kui teil on mingisugune taust, siis olete ilmselt sellest kuulnud cron, see tarkvara on täielikult pühendatud õigete ülesannete käivitamiseks õigel ajal. Kuid see tööriist on tõesti loodud lihtsust silmas pidades ja lõpuks võib teil olla halbu üllatusi.Kui teil on kunagi õnnestunud Windowsi ülesanne ajastada, olete kasutanud Windowsi tegumite plaanijat. Sellel on vaikimisi graafiline kasutajaliides, kuid see ei muuda selle kasutamist samuti nii lihtsaks: need kaks süsteemi käivitavad protsessi lihtsalt kindla kellaaja ja kuupäevaga.

Selleks, et mõista, kuidas systemd teile seal kasulik võib olla, võtan näite.

Milliseid lõkse süsteemitaimerid teid väldivad?

Kui teil on kunagi masin, kus on teie jaoks olulised andmed, soovite, et teie andmete koopia oleks mõnes teises, tõenäoliselt turvalisemas kohas. Kui haldate serverit, on see kohustuslik: lõppude lõpuks, kuidas taastate kõvaketta rikke korral ja takistate andmete taastamist?

Nii et vastutava isikuna seadistate varundamise igal nädalal või iga päev. Võite selle seadistada croni abil, ajastate kell 4:24, kuid siin algab probleem: mis siis, kui teie server on mingil põhjusel kell 4.10–4.30 välja lülitatud?

Tõenäoliselt jätab cron selle varundamise lihtsalt vahele. See võib olla kriitiline, kui see juhtub sageli ja vaikselt või kui teie kood tugineb sellele, et see töötab, ja muul juhul võib see ebaõnnestuda. Üldiselt juhtub see siis, kui seadistate puhastustoimingu croni kaudu ja see ei käivitu. Järsku ei pruugi teie koodil jätkamiseks jätkuda piisavalt ruumi ja see puruneb - see on kurb, nii kurb olukord, eks härra Elton John.

Kui aga vahelejäänud käivitamine võib osutuda probleemiks, kujutage ette üks sekund - vau, John Lennon nüüd? - et teie ülesanne on liiga aeglane. Kui teie ülesanne on määratud töötama iga 10 minuti tagant, kuid selle täitmiseks kulub 15 minutit, käivitab cron või Windows uue ülesande õnnelikult ka siis, kui praegust ülesannet pole veel läinud - nii et teil on korraga kaks ülesande eksemplari , mis on täiuslik retsept eest katastroof. Kui programm töötab samaaegselt, kui see pole selleks loodud, rikub see tõenäoliselt faile, muid tarkvarasid, andmebaase - ja teie serverist saab järsku uppuv laev nagu Titanic.

OK, võib-olla lähen Titanicuga liiga kaugele, kuid saate idee. Kuigi systemd poleks selle laeva päästmiseks palju teinud, võib see teid aidata kõigi nende puudujääkide korral ja tagada pikema jõulupuhkuse tänu vigadele, mida see teid väldib. Nüüd on aeg õppida tundma, kuidas süsteemis taimereid seadistada.

Automaatse serveri varundamise ajastamine?

Esiteks käivitab systemd taimerid systemd-teenuse, nii et enne oma ülesande ajastamist peate selle kõigepealt teenuseks tegema. Õnneks olen kirjutanud juhendi systemd-teenuse loomiseks. Sel viisil tutvustatakse teile systemdi tööviisi. Enne jätkamist peaksite selle läbi lugema. Kui just sina täpselt teadke, mida teete, peaks teie systemd teenusefail olema mitte sisaldavad mis tahes seadet WantedBy =. Kui soovite oma teenust käivitada kindlal kellaajal, ei soovi te seda tõenäoliselt käivitamisel käivitada.

Tänu systemd teenindussüsteemile on võimatu mitu ülesande eksemplari ekslikult käivitada: kui ülesanne juba töötab, jätab see selle käivitamise lihtsalt vahele ja jätab praegu töötava ülesande oma töö lõpetama.

Kui teil on süsteemiteenus ajastada, looge oma teenusega sama failinimega fail, välja arvatud see, et see peaks lõppema .taimeri asemel .teenus. Meie automatiseeritud varundamise näites oleks teenus automatiseeritud varundamine.teenus ja taimer oleks varundatud automaatselt.taimer. Mõlemad failid peaksid olema samas kataloogis. Nagu ma teenuse artiklis systemd ütlesin, soovitan teil need failid kirjutada tavalisse kohta, näiteks oma kodukataloogi, ja seejärel kopeerida need pärast muudatuste tegemist kausta systemd.

Nii et lubage mul näidata teile, kuidas meie taimeri fail välja näeb:

[Üksus]
Kirjeldus = Varundamise kavandamine tipptunnivälisel ajal
[Taimer]
OnCalendar = * - * - * 03:00:00
RandomizedDelaySec = 7200
Püsiv = tõene
[Install]
WantedBy = taimerid.sihtmärk

Sarnaselt systemd-teenustega on seal 3 jaotist. [Üksus] või [Install] töötavad täpselt samamoodi, nagu on selgitatud minu süsteemiteenuste artiklis. Pange tähele, et WantedBy = on siin oluline, kuna taimereid saab käivitada või peatada, nii et kui te ei kästi systemd-l käivitada taimer käivitamise ajal, ei käivita see kunagi. taimerid.target on taimeritele mõeldud spetsiaalne systemd sihtmärk.

Nüüd jaotis [Taimer]. Selle seest leiate kõik seaded, mis on seotud sellega, millal taimer peaks käivituma. Meie automaatse varundamise jaoks olen käskinud systemd käivitada see serveri ajavööndil kella 3.00–5.00. Täpne aeg on igal päeval juhuslik.

OnCalendar = määrab teie serveri aja (seinakellaga) seotud taimeri, näiteks igal pühapäeval kell 13.00. Kui olete cronit varem kasutanud, peaksite selle süntaksiga tõesti tuttav olema. Sellel on siiski ka mõned eelised.

Näiteks kui soovite, et midagi juhtuks tunnis, saate teha järgmist

OnCalendar = tunnis

ja iga päev:

OnCalendar = iga päev

Tegelikult toetab see kõiki järgmisi väärtusi:

  1. minutiga
  2. tunnis
  3. iga päev
  4. igakuine
  5. kord nädalas
  6. aastas
  7. kord kvartalis
  8. poolaastas

Nende märksõnadega on aga probleem: näiteks käivitab iga päev alati kesköö, mis on arvutisüsteemides sageli tipptund. Sellepärast on soovitatav kasutada RandomizedDelaySec = (selle kasutamine on täpsustatud allpool). Igatahes varundamiseks pole see hea võimalus: südaöö pole tipptundidel, pigem on see vastupidi. Seega peame selle ülesande käivitamise täpsemalt määrama.

Kui soovite rohkem kontrolli, võite kirjutada kuupäeva nagu 2018-12-06 12:49:37. Noh, kui olete nii konkreetne, käivitate taimeri üks kord. Korduvaks muutmiseks asendate kõik need elemendid tärniga *.

OnCalendar = * - * - * 03:00:00

Nagu ülal näete, on meie varunäites kogu kuupäevaosa * - * - *, see tähendab, et see peaks toimuma iga aasta iga kuu iga päev. Nüüd, kui teete:

OnCalendar = * - 12-25 03:00:00

Seejärel kestab see igal 25. detsembril kell 3 hommikul. Ideaalne süsteemimõõtja jõuluvanale - isegi kui ma kahtlen, kas tal seda kunagi vaja läheb! Nii et tärn lisab kordumise sinna, kuhu panete. Kui panete selle aasta väljale, tähendab see "igal aastal" jne.

Lõpuks võite lisada rea ​​lõppu UTC, et kasutada kohaliku ajavööndi asemel UTC-aega. Näiteks lähtestavad mõned teenused oma API-kvoodid keskööl, kuid ajavööndi kõrvalekallete vältimiseks kasutab UTC. Nii et selliste ülesannete jaoks teete järgmist:

OnCalendar = igapäevane UTC

Nüüd lahendame veel ühe probleemi: tipptunnid. systemd-l on ka seade selle vastu võitlemiseks.

RandomizedDelaySec = võimaldab juhusliku ajaga ülesannet edasi lükata. Väärtus on taimeri viivitatud sekundite maksimaalne arv. See on spetsiaalselt ette nähtud sellisteks juhtumiteks. Mäletate, et süsteemis käivitub iga päev alati keskööl? Iganädalane häire käivitub alati esmaspäeva keskööl ja iga-aastane vallandub 1. jaanuari keskööl, mis on üks halvemaid tippe aastal võrgu katkestustega kõikjal. Kindlasti ei taha, et see juhtuks.

Viivituse lisamisega eemaldate selle probleemi: see viib teie ülesande teadmata ajal automaatselt edasi. Juhuslikkus on siin oluline, kuna see on palju tõenäolisem isegi siis, kui see on juhuslik ja ühtlane koormus võimaldab teie ülesandeid paremini optimeerida.

Oletame, et peate oma ülesanded tegema hommikul kella 7.00 paiku, kuid soovite lubada väikest kuni 15-minutist viivitust:

RandomizedDelaySec = 900

Sellest peaks viivituste jaoks piisama. Mõnikord piisab tahtmatute tippude vältimiseks isegi millisekundilistest viivitustest.

Püsiv = hoolitseb vastamata taimeri päästikute eest. Mis siis, kui teie server on öösel välja lülitatud? Noh, varundamine ei käivitaks kunagi üldse. Kui määrate selle väärtuseks Tõene, lubab systemd sellistel juhtudel käivitada järgmisel käivitamisel. Nii teate ühel või teisel viisil, taimer töötab. Selle kasutamine on lihtne, sa lihtsalt teed seda:

Püsiv = tõene

Sellel on siiski üks puudus, mida on niikuinii tõesti raske vältida: kui mitu erineva taimeri ülesannet vahele jätta, töötavad need kõik käivitamisel ja aeglustavad seda käivitamist. Minu arvates on see palju parem kui siis, kui see kunagi ei tööta ja lõppude lõpuks on see normaalne, on taimeri käitamiseks kõige sobivam hetk, kui see on ajastatud, pärast on see ilmselt igatahes kohatu.

OnBootSec = on viimane variant, mida ma teile näitan (kuid mitte vähemtähtis). See on juhul, kui soovite mõne aja pärast käivitamist taimeri käivitada, mitte kalendri põhjal. Näiteks kui peate käivitamisel kontrollima, kas teie server on korralikult käivitatud ja töötab ettenähtud viisil, võite kirjutada kontrolliteenuse ja kasutada seda taimeri sätet selle käivitamiseks pärast seda, kui süsteemil on piisavalt aega käivitamiseks.

Oletame, et süsteem vajab käivitamiseks 3 minutit, võite teha järgmist:

OnBootSec = 180

Vaatamata selle nimele saate teha ka järgmist

OnBootSec = 3 minutit

Kui täpsustate nii OnBootSec = kui ka OnCalendar =, käivitab see teenuse alati, kui mõni neist kahest sündmusest juhtub.

Okei, nüüd on aeg fail salvestada, kopeerida see süsteemi kausta, kui järgisite minu ülaltoodud nõuandeid, ja testida, kas teie taimer töötab korralikult.

Lubage oma uus taimer ja jälgimine

Uue taimeri testimiseks peate systemd-le ütlema, et lisasite uue taimeri, nii et peate tippima selle käsu:

$ sudo systemctl deemon-reload

Nüüd võtab systemd arvesse teie uut taimerit ja uurib hoolikalt, millal teie ülesanne käivitada. Kuna systemd töötab alati, on see siiski üks paremaid kandidaate teie ajastatud ülesannete haldamiseks ja käitamiseks.

Üks asi, mis teile võib tunduda vastupidine: taimer on vaikimisi keelatud. Selle lubamiseks peate tegema selle käsu:

$ sudo systemctl enable - nüüd automatiseeritud varundamine.taimer

Tõenäoliselt soovite siis näha, kas teie taimer toimib ootuspäraselt. Hea uudis: systemd on isegi piisavalt lahke, kui teil on käsk, mis ütleb teile, millal see viimati käivitati ja millal järgmine käivitus on kavandatud (välja arvatud juhul, kui taimer on määratud töötama ainult alglaadimisel, kuna systemd ei tea, millal süsteem uuesti käivitub, ilmselt). Siin on see käsk:

$ systemctl oleku automaatne varundamine.taimer

Lõpuks, kui te ei vaja enam taimerit, saate selle ka keelata:

$ sudo systemctl keelake - nüüd automaatne varundamine.taimer

Järeldus

Systemd taimereid kasutades on plaanitud ülesannete haldamine järgmisele tasemele: ausalt öeldes tunnen isiklikult, et ajastatud ülesanded oleksid pidanud olema sellised juba aastaid.

Oh, üks väike üllatus teile: kõik süsteemi taimerid on logitud filtreerimise, logi pööramise ja muu sarnasega hästi struktureeritud süsteemi. Kutsun teid üles vaatama, kuidas näete oma ajastatud ülesannete logisid!

Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...
Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...
Parimad Linuxi käsurea mängud
Käsurida pole Linuxi kasutamisel lihtsalt teie suurim liitlane - see võib olla ka meelelahutusallikas, sest saate seda kasutada paljude lõbusate mängu...