systemd

Cron novej generácie so systémovým vytváraním časovača

Cron novej generácie so systémovým vytváraním časovača
Potrebujete v budúcnosti naplánovať nejakú úlohu na svojom počítači? Môže to vyzerať jednoducho - koniec koncov, vaša umývačka riadu dokáže počkať pred spustením pomocou tlačidla - ale niekedy počítače robia také jednoduché úlohy tak ťažké.Ale ak máte nejaké pozadie, pravdepodobne ste už o tom počuli cron, tento softvér je úplne určený na spustenie správnej úlohy v pravý čas. Ale tento nástroj bol skutočne navrhnutý s ohľadom na jednoduchosť a nakoniec môžete mať nepríjemné prekvapenia.Ak sa vám niekedy podarilo naplánovať úlohu v systéme Windows, použili ste Plánovač úloh systému Windows. Predvolene má grafické používateľské rozhranie, ale tiež to neumožňuje jeho jednoduché použitie: tieto dva systémy spustia proces v pevne stanovenom čase a dátume.

Aby som pochopil, ako vám tam môže byť systemd nápomocný, vezmem si príklad.

Aké nástrahy systemd timers sa vám vyhnú?

Ak niekedy vlastníte stroj s údajmi, na ktorých vám záleží, budete chcieť mať kópiu svojich údajov na inom, pravdepodobne bezpečnejšom mieste. Ak spravujete server, je to povinné: koniec koncov, ako sa budete zotavovať, ak zlyhá váš pevný disk, a zabrániť vám v obnovení akýchkoľvek údajov?

Takže ako zodpovedný človek nastavujete zálohovanie každý týždeň alebo každý deň. Môžete ho nastaviť pomocou cron, naplánujete ho na 4:24, ale tu sa začína problém: čo keď sa váš server z akéhokoľvek dôvodu vypne od 4:10 do 4:30?

Je pravdepodobné, že cron túto zálohu len preskočí. To môže byť kritické, ak sa to stane často a ticho, alebo ak sa váš kód spolieha na skutočnosť, že beží, a inak môže zlyhať. Spravidla sa to stane, keď nastavíte úlohu vyčistenia cez cron a tá sa nespustí. Váš kód môže mať zrazu dosť miesta na to, aby mohol pokračovať, a pokazí sa - je to smutná, taká smutná situácia, správne, pán Elton John.

Ak však môže byť zmeškaný štart problém, predstavte si sekundu - Páni, John Lennon? - že vaša úloha je príliš pomalá. Ak je vaša úloha nastavená na spustenie každých 10 minút, ale jej dokončenie trvá 15 minút, systém cron alebo Windows s radosťou spustí ďalšiu úlohu, aj keď aktuálna úloha ešte nezmizla - a teda budete mať súčasne spustené 2 inštancie svojej úlohy , Ktoré je perfektny recept pre katastrofa. Ak program beží súčasne a nie je na to navrhnutý, pravdepodobne poškodí súbory, iný softvér, databázy - a váš server sa zrazu stane potápajúcou sa loďou ako Titanic.

Dobre, možno zachádzam s Titanikom príliš ďaleko, ale dostanete predstavu. Aj keď systemd nemohol urobiť veľa pre záchranu tejto lode, môže vám pomôcť so všetkými týmito nedostatkami a zaistiť vám dlhšiu vianočnú dovolenku vďaka chybám, ktorým sa vám vyhne. Teraz je čas spoznať, ako nastaviť systemd časovače.

Ako naplánovať automatické zálohovanie servera?

Systémové časovače v prvom rade spúšťajú službu systemd, takže pred naplánovaním úlohy musíte najskôr urobiť službu. Našťastie som napísal príručku k vytvoreniu systémovej služby, ktorá vám predstaví systémový spôsob práce. Mali by ste si ho prečítať skôr, ako budete pokračovať. Pokiaľ však nie presne vedieť, čo robíte, mal by váš systémový servisný súbor nie obsahovať akékoľvek nastavenie WantedBy =. Ak chcete službu spustiť v konkrétnom čase, pravdepodobne ju nechcete spustiť pri štarte.

Vďaka systému služieb systemd je nemožné nechať omylom spustiť viac inštancií vašej úlohy: ak je úloha už spustená, toto spustenie iba preskočí a aktuálne spustenú úlohu nechá dokončiť svoju úlohu.

Keď budete mať naplánovanú systémovú službu, vytvorte súbor s rovnakým názvom súboru ako vaša služba, okrem toho, že by mal končiť .časovač namiesto .služby. V našom príklade automatizovaného zálohovania by služba bola automatizované zálohovanie.služba a časovač by boli automatizované zálohovanie.časovač. Oba súbory by mali byť v rovnakom adresári. Ako som vám povedal v článku o systémovej službe, odporúčam vám, aby ste tieto súbory napísali na bežné miesto, napríklad do domovského adresára, a po dokončení úprav ich skopírovali do systémového priečinka.

Takže vám ukážem, ako vyzerá náš súbor časovača:

[Jednotka]
Popis = Naplánujte zálohovanie mimo špičkových hodín
[Časovač]
OnCalendar = * - * - * 03:00:00
RandomizedDelaySec = 7200
Trvalé = pravda
[Inštalácia]
WantedBy = časovače.cieľ

Rovnako ako v systémových službách, aj tu sú 3 sekcie. [Jednotka] alebo [Inštalácia] fungujú úplne rovnako, ako sú vysvetlené v mojom článku o systémových službách. Upozorňujeme, že WantedBy = je tu dôležité, pretože časovače je možné spustiť alebo zastaviť, takže ak nepoviete systemd, aby spustil časovač počas bootovania, nikdy sa nespustí. časovače.terč je špeciálny systémový terč pre časovače.

Teraz časť [Časovač]. V jeho vnútri nájdete všetky nastavenia týkajúce sa toho, kedy by sa mal časovač spustiť. Pre naše automatizované zálohovanie som povedal systemd, aby ho spustil medzi 3:00 a 5:00 v časovom pásme servera. Presný čas je každý deň náhodný.

OnCalendar = nastavuje časovač súvisiaci s časom vášho servera (hodiny v stene), napríklad každú nedeľu o 13:00. Ak ste predtým používali cron, mali by ste byť s touto syntaxou skutočne oboznámení. Má však niektoré ďalšie výhody.

Napríklad, ak chcete, aby sa niečo stalo každú hodinu, môžete urobiť nasledovne:

OnCalendar = každú hodinu

a denne:

OnCalendar = denne

V skutočnosti podporuje všetky nasledujúce hodnoty:

  1. každú chvíľu
  2. každú hodinu
  3. denne
  4. mesačne
  5. týždenne
  6. ročne
  7. štvrťročne
  8. dvakrát ročne

S týmito kľúčovými slovami však existuje problém: napríklad denné spúšťanie vždy o polnoci, čo je vo výpočtových systémoch často špička. Preto sa odporúča použiť RandomizedDelaySec = (použitie je uvedené nižšie). Pre zálohovanie to nie je dobrá voľba: polnoc nie je mimo špičiek, je to skôr naopak. Musíme teda nastaviť presnejšie, kedy chceme, aby sa táto úloha spustila.

Ak chcete mať väčšiu kontrolu, môžete napísať dátum ako 2018-12-06 12:49:37. No, ak ste taký konkrétny, spustíte časovač iba raz. Aby sa to opakovalo, nahradíte ktorýkoľvek z týchto prvkov hviezdičkou *.

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

Ako vidíte vyššie, v našom príklade zálohovania je celá dátumová časť * - * - *, čo znamená, že by sa mala vyskytovať každý deň každého mesiaca každého roku. Teraz, ak tak urobíte:

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

Potom beží vždy 25. decembra o 3:00. Perfektný systémový časovač pre Ježiška - aj keď pochybujem, že ho bude niekedy potrebovať! Hviezdička teda pridáva opakovanie tam, kam ste ju vložili. Ak to dáte do ročného poľa, znamená to „každý rok“ atď.

Nakoniec môžete pridať UTC na koniec riadku, aby sa namiesto miestneho časového pásma použil čas UTC. Napríklad niektoré služby resetujú svoje kvóty API o polnoci, ale aby sa zabránilo akejkoľvek odchýlke v časovom pásme, používa UTC. Pre tieto úlohy by ste teda robili:

OnCalendar = denný UTC

Poďme teraz vyriešiť ďalší problém: dopravné špičky. systemd má tiež prostredie, ktoré proti tomu bojuje.

RandomizedDelaySec = umožňuje oddialiť úlohu v náhodnom čase. Hodnota je maximálny počet sekúnd, ktoré časovač oneskorí. Je špeciálne určený pre takéto prípady. Pamätáte si, že v systéme systemd sa každý deň spúšťa vždy o polnoci? Týždenné sa spúšťajú vždy o pondelkovej polnoci a ročné sa spúšťajú 1. polnocou, čo je jeden z najhorších vrcholov v roku s výpadkami siete všade. Určite nechcete, aby sa to stalo.

Pridaním oneskorenia tento problém odstránite: vaša úloha sa automaticky oneskorí v neznámy čas. Náhodnosť je tu dôležitá, pretože je oveľa pravdepodobnejšie, že bude aj vtedy, keď je náhodná a rovnomerné načítanie umožňuje lepšie optimalizovať vaše úlohy.

Povedzme, že je potrebné, aby ste svoje úlohy zvládli okolo 7:00 ráno, ale chcete povoliť malé oneskorenie max. 15 minút, urobili by ste toto:

RandomizedDelaySec = 900

To by malo stačiť na meškanie. Niekedy stačia aj milisekundové oneskorenia, aby sa zabránilo nechceným výkyvom.

Trvalé = stará sa o zmeškané spúšťače časovača. Čo ak je váš server v noci vypnutý? Zálohovanie by sa nikdy nespustilo vôbec. Ak ho nastavíte na hodnotu true, v takýchto prípadoch ho systemd spustí pri ďalšom zavedení. Takto nejako viete, že úloha časovača bude spustená. Jeho použitie je jednoduché, stačí urobiť toto:

Trvalé = pravda

To má však jednu nevýhodu, ktorej sa aj tak naozaj ťažko vyhnete: keď zmeškáte viac úloh z rôznych časovačov, všetky sa spustia pri štarte a spomalia toto štarte. Podľa môjho názoru je to oveľa lepšie, ako keby nikdy nebežalo a koniec koncov je to normálne, najvhodnejším okamihom na spustenie časovača je jeho naplánovanie, potom to bude pravdepodobne aj tak nevhodné.

OnBootSec = je posledná možnosť, ktorú vám ukážem (ale nie najmenej). Je to, ak chcete spustiť časovač nejaký čas po štarte namiesto na základe kalendára. Napríklad, ak potrebujete skontrolovať pri štarte, či je váš server správne spustený a funguje podľa plánu, môžete napísať šekovú službu a použiť toto nastavenie časovača na jeho spustenie, keď bude mať systém dostatok času na zavedenie.

Povedzme, že systém potrebuje na spustenie 3 minúty, môžete:

OnBootSec = 180

A napriek svojmu názvu môžete tiež robiť:

OnBootSec = 3 minúty

Ak upresníte OnBootSec = a OnCalendar =, služba sa spustí vždy, keď dôjde k ktorejkoľvek z týchto 2 udalostí.

Dobre, teraz je čas uložiť súbor, skopírovať ho do systémového priečinka, ak ste postupovali podľa mojich rád vyššie, a vyskúšať, či časovač funguje správne.

Povoľte nový časovač a sledovanie

Ak chcete otestovať nový časovač, musíte povedať systemd, že ste pridali nový časovač, takže musíte napísať tento príkaz:

$ sudo systemctl daemon-reload

Teraz systemd vezme do úvahy váš nový časovač a dôkladne sa pozrie, kedy má úlohu splniť. Pretože systemd neustále beží, je to koniec koncov jeden z najlepších kandidátov na správu a vykonávanie naplánovaných úloh.

Jedna vec, ktorú by ste mohli považovať za neintuitívne: časovač je v predvolenom nastavení zakázaný. Aby ste to povolili, musíte urobiť tento príkaz:

$ sudo systemctl enable --now automated-backup.časovač

Potom pravdepodobne budete chcieť zistiť, či váš časovač funguje podľa očakávaní. Dobrá správa: systemd je dokonca taký láskavý, že má príkaz, ktorý vám povie, kedy bol naposledy spustený a kedy je naplánované ďalšie spustenie (okrem prípadu, keď je časovač nastavený na spustenie iba pri štarte, pretože systemd samozrejme nevie, kedy sa bude systém znovu zavádzať). Tu je tento príkaz:

$ systemctl status automated-backup.časovač

Nakoniec, keď už časovač nepotrebujete, môžete ho tiež deaktivovať:

$ sudo systemctl disable - now automated-backup.časovač

Záver

Pomocou systémových časovačov je vaša správa naplánovaných úloh na ďalšej úrovni: úprimne povedané, osobne mám pocit, že naplánované úlohy by mali byť takto už roky.

Jedno malé prekvapenie pre vás: všetky systemd časovače sú prihlásené v dobre štruktúrovanom systéme s filtrovaním, rotáciou protokolov a podobne. Pozývam vás preto, aby ste videli, ako vidíte protokoly o vašich naplánovaných úlohách!

Kurzor pri písaní v systéme Windows 10 skáče alebo sa pohybuje náhodne
Ak zistíte, že kurzor myši skáče alebo sa pohybuje sám, automaticky a náhodne pri písaní na notebooku alebo počítači so systémom Windows, niektoré z t...
Ako zmeniť smer posúvania myši a touchpadu v systéme Windows 10
Myš a TouchpadNielenže uľahčujú výpočty, ale sú aj efektívnejšie a menej časovo náročné. Nemôžeme si predstaviť život bez týchto zariadení, ale je pra...
Ako zmeniť veľkosť, farbu a schému ukazovateľa myši a kurzora v systéme Windows 10
Ukazovateľ myši a kurzor vo Windows 10 sú veľmi dôležité aspekty operačného systému. Dá sa to povedať aj pre iné operačné systémy, takže v skutočnosti...