systemd

Cron nové generace se systémovým vytvořením časovače

Cron nové generace se systémovým vytvořením časovače
Potřebujete si v budoucnu naplánovat nějaký úkol na svém počítači? Může to vypadat jednoduše - koneckonců, vaše myčka je schopna počkat před spuštěním pomocí tlačítka - ale někdy počítače dělají takové jednoduché úkoly příliš těžké.Ale pokud máte nějaké zázemí, pravděpodobně jste o tom už slyšeli cron, tento software plně určený ke spuštění správného úkolu ve správný čas. Ale tento nástroj byl skutečně navržen s ohledem na jednoduchost a na konci můžete mít špatná překvapení.Pokud se vám někdy podařilo naplánovat úkol v systému Windows, použili jste Plánovač úloh systému Windows. Ve výchozím nastavení má grafické uživatelské rozhraní, ale jeho používání také není tak snadné: tyto dva systémy právě spouští proces ve stanoveném čase a datu.

Abychom pochopili, jak vám tam může být systemd užitečné, vezmu si příklad.

Jakým nástrahám se systémovým časovačům vyhnete?

Pokud někdy vlastníte stroj s daty, na kterých vám záleží, budete chtít mít kopii svých dat na jiném, pravděpodobně bezpečnějším místě. Pokud spravujete server, je to povinné: koneckonců, jak se zotavíte, pokud selže váš pevný disk, a zabrání vám obnovit všechna data?

Jako odpovědná osoba tedy nastavujete zálohování každý týden nebo každý den. Můžete jej nastavit pomocí cronu, naplánujete jej na 4:24, ale zde nastává problém: co když je váš server z jakéhokoli důvodu vypnut od 4:10 do 4:30?

Je pravděpodobné, že cron tuto zálohu prostě přeskočí. To může být kritické, pokud k tomu dochází často a tiše, nebo pokud se váš kód spoléhá na skutečnost, že běží, a jinak může selhat. Obecně se to stane, když nastavíte úlohu čištění pomocí cron a nespustí se. Najednou může mít váš kód nedostatek místa pro pokračování a rozbije se - je to smutná, tak smutná situace, pane Eltonu Johne.

Pokud však může být zmeškaný start problémem, představte si jednu sekundu - Páni, John Lennon teď? - že váš úkol je příliš pomalý. Pokud je váš úkol nastaven na spuštění každých 10 minut, ale jeho dokončení trvá 15 minut, cron nebo Windows šťastně spustí další úkol, i když aktuální úkol ještě není pryč - a tak budete mít 2 instance vašeho úkolu spuštěné souběžně , který je perfektní recept pro katastrofa. Pokud program běží současně, i když k tomu není navržen, pravděpodobně poškodí soubory, jiný software, databáze - a váš server se najednou stane potápějící se lodí jako Titanic.

Dobře, možná zacházím s Titanicem příliš daleko, ale máš představu. Zatímco systemd nemohl udělat moc pro záchranu této lodi, může vám pomoci se všemi těmito nedostatky a zajistit vám delší vánoční dovolenou díky chybám, kterým se vám vyhne. Nyní je čas poznat, jak nastavit systemd časovače.

Jak naplánovat automatické zálohování serveru?

Časovače systemd za prvé spouští službu systemd, takže před naplánováním úkolu je nejprve nutné provést službu. Naštěstí jsem napsal průvodce vytvořením služby systemd, tímto způsobem vám představí způsob práce systemd. Měli byste si to přečíst, než budete pokračovat. Pokud však ne přesně tak víte, co děláte, měl by váš systémový servisní soubor ne obsahovat jakékoli nastavení WantedBy =. Pokud chcete službu spustit v určitou dobu, pravděpodobně ji nechcete spustit při spuštění.

Díky systému služeb systemd je nemožné nechat omylem spustit více instancí vašeho úkolu: pokud je úkol již spuštěný, bude pouze přeskočit toto spuštění a nechat aktuálně spuštěný úkol dokončit svou úlohu.

Jakmile budete mít naplánovanou službu systemd, vytvořte soubor se stejným názvem souboru jako vaše služba, kromě toho, že by měla končit .místo časovače .servis. V našem příkladu automatizovaného zálohování by služba byla automatizovaným zálohováním.služba a časovač by byly automatizované zálohování.časovač. Oba soubory by měly být ve stejném adresáři. Jak jsem vám řekl v článku o systémové službě, doporučuji vám tyto soubory zapsat na normální místo, například do domovského adresáře, a poté je po dokončení úprav zkopírovat do systémové složky.

Dovolte mi tedy ukázat vám, jak vypadá náš soubor časovače:

[Jednotka]
Popis = Naplánovat zálohování mimo špičku
[Časovač]
OnCalendar = * - * - * 03:00:00
RandomizedDelaySec = 7200
Trvalé = pravda
[Nainstalujte]
WantedBy = časovače.cílová

Stejně jako v systémových službách jsou 3 sekce. [Jednotka] nebo [Instalovat] fungují přesně stejně, jak je vysvětleno v mém článku o systémových službách. Vezměte prosím na vědomí, že WantedBy = je zde důležité, protože časovače lze spustit nebo zastavit, takže pokud neřeknete systemd, aby spustil časovač během bootování, nikdy se nespustí. časovače.target je speciální systémový cíl pro časovače.

Nyní část [Časovač]. Uvnitř najdete všechna nastavení související s časem spuštění časovače. Pro naše automatické zálohování jsem řekl systemd, aby jej spustil mezi 3:00 a 5:00 v časovém pásmu serveru. Přesný čas je každý den náhodný.

OnCalendar = nastavuje časovač související s časem vašeho serveru (hodiny ve zdi), například každou neděli v 13:00. Pokud jste dříve používali cron, měli byste tuto syntaxi opravdu znát. Má však některé další výhody.

Například pokud chcete, aby se něco stalo každou hodinu, můžete to udělat takto:

OnCalendar = každou hodinu

a denně:

OnCalendar = denně

Ve skutečnosti podporuje všechny následující hodnoty:

  1. každou minutu
  2. hodinově
  3. denně
  4. měsíční
  5. týdně
  6. roční
  7. čtvrtletní
  8. pololetně

S těmito klíčovými slovy však existuje problém: například denní spouštění vždy o půlnoci, což je ve výpočetních systémech často špičková hodina. Proto se doporučuje použít RandomizedDelaySec = (jeho použití je uvedeno níže). Pro zálohování to není dobrá volba: půlnoc není mimo špičku, je to naopak. Musíme tedy přesněji nastavit, kdy chceme vidět spuštění této úlohy.

Pokud chcete mít větší kontrolu, můžete napsat datum jako 2018-12-06 12:49:37. Pokud jste tak konkrétní, spustíte časovač pouze jednou. Aby se to opakovalo, nahradíte kterýkoli z těchto prvků hvězdičkou *.

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

Jak vidíte výše, v našem příkladu zálohování je celá část data * - * - *, což znamená, že by se měla vyskytovat každý den každého měsíce každého roku. Nyní, pokud tak učiníte:

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

Poté běží vždy 25. prosince ve 3:00. Perfektní systémový časovač pro Santa Clause - i když pochybuji, že ho někdy bude potřebovat! Hvězdička tedy přidává opakování tam, kam ji umístíte. Pokud to zadáte do pole pro rok, znamená to „každý rok“ atd.

Nakonec můžete přidat UTC na konec řádku, abyste místo místního časového pásma použili čas UTC. Například některé služby resetují své kvóty API o půlnoci, ale aby se vyhnuly zkreslení časových pásem, používají UTC. U takových úkolů byste tedy udělali:

OnCalendar = denní UTC

Pojďme tedy vyřešit další problém: dopravní špičky. systemd má také nastavení, jak proti tomu bojovat.

RandomizedDelaySec = umožňuje oddálit úkol v náhodném čase. Hodnota je maximální počet sekund, které časovač zpozdí. Je speciálně určen pro takové případy. Pamatujete si, že v systemd se denně spouští vždy o půlnoci? Týdenní se spouští vždy v pondělí o půlnoci a roční se spouští 1. ledna o půlnoci, což je jeden z nejhorších vrcholů roku s výpadky sítě všude. Určitě nechcete, aby se to stalo.

Přidáním zpoždění tento problém odstraníte: automaticky zpozdí váš úkol v neznámém čase. Náhodnost zde je důležitá, protože je mnohem pravděpodobnější, že bude i v případě, že je náhodná a rovnoměrné načtení umožňuje lépe optimalizovat vaše úkoly.

Řekněme, že musíte své úkoly spouštět kolem 7:00 ráno, ale chcete povolit malé zpoždění maximálně 15 minut, uděláte to takto:

RandomizedDelaySec = 900

To by mělo stačit na zpoždění. Někdy stačí i milisekundová zpoždění, aby se zabránilo nechtěným špičkám.

Trvalý = postará se o zmeškané spouštěče časovače. Co když je váš server v noci vypnutý? Záloha by se nikdy nespustila vůbec. Nastavení na hodnotu true v takových případech umožní systému spustit jej při příštím spuštění. Tímto způsobem budete vědět, že časovač bude spuštěn. Jeho použití je jednoduché, stačí udělat toto:

Trvalé = pravda

To však má jednu nevýhodu, které je opravdu těžké se vyhnout: pokud dojde k chybě více úkolů z různých časovačů, všechny se spustí při spuštění a zpomalí toto spuštění. Podle mého názoru je to mnohem lepší, než kdyby nikdy neproběhlo a po tom všem, co je normální, je nejvhodnější okamžik pro spuštění časovače, když je naplánován, poté to bude pravděpodobně stejně nevhodné.

OnBootSec = je poslední možnost, kterou vám ukážu (ale v neposlední řadě). Je to, pokud chcete spouštět časovač nějaký čas po spuštění místo na základě kalendáře. Například pokud potřebujete zkontrolovat při spuštění, zda je váš server správně spuštěn a funguje podle plánu, můžete napsat kontrolní službu a použít toto nastavení časovače k ​​jeho spuštění poté, co měl systém dostatek času na spuštění.

Řekněme, že systém potřebuje 3 minuty na spuštění, můžete:

OnBootSec = 180

A přes jeho jméno můžete také:

OnBootSec = 3 minuty

Pokud upřesníte OnBootSec = a OnCalendar =, spustí se služba vždy, když dojde k některé z těchto 2 událostí.

Dobře, teď je čas uložit soubor, zkopírovat jej do systémové složky, pokud jste postupovali podle mé rady výše, a vyzkoušet, zda váš časovač funguje správně.

Povolte svůj nový časovač a monitorování

Abyste mohli otestovat nový časovač, musíte systému říct, že jste přidali nový časovač, takže musíte zadat tento příkaz:

$ sudo systemctl daemon-reload

Nyní systemd vezme v úvahu váš nový časovač a pečlivě se podívá, kdy má váš úkol spustit. Protože systemd je vždy spuštěn, je po všem jednom z nejlepších kandidátů pro správu a spuštění naplánovaných úkolů.

Jedna věc, kterou byste mohli považovat za neintuitivní: časovač je ve výchozím nastavení deaktivován. Chcete-li jej povolit, musíte provést tento příkaz:

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

Potom pravděpodobně budete chtít zjistit, zda váš časovač funguje podle očekávání. Dobrá zpráva: systemd je dokonce tak laskavý, že vám dá příkaz, který vám řekne, kdy byl spuštěn naposledy a kdy je naplánováno další spuštění (s výjimkou případů, kdy je časovač nastaven tak, aby běžel pouze při spuštění, protože systemd neví, kdy se systém bude znovu zavádět, samozřejmě). Tady je ten příkaz:

$ systemctl status automated-backup.časovač

Nakonec, když časovač již nepotřebujete, můžete jej také deaktivovat:

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

Závěr

Díky systémovým časovačům je vaše správa naplánovaných úkolů na další úrovni: upřímně řečeno, osobně mám pocit, že naplánované úkoly by měly být takto už roky.

Jedno malé překvapení pro vás: všechny systémové časovače jsou přihlášeny v dobře strukturovaném systému s filtrováním, rotací protokolů a podobně. Takže vás pozývám, abyste viděli, jak vidíte protokoly o vašich naplánovaných úkolech!

Hry HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
Mnoho vývojářů a vydavatelů her přichází s HD remasterem starých her, aby prodloužili životnost franšízy, prosím fanoušky, kteří požadují kompatibilit...
Hry Jak používat AutoKey k automatizaci linuxových her
Jak používat AutoKey k automatizaci linuxových her
AutoKey je nástroj pro automatizaci stolních počítačů pro systémy Linux a X11, programovaný v programech Python 3, GTK a Qt. Pomocí jeho funkcí skript...
Hry Jak zobrazit počítadlo FPS v linuxových hrách
Jak zobrazit počítadlo FPS v linuxových hrách
Hraní na Linuxu získalo velký tlak, když společnost Valve v roce 2012 oznámila podporu systému Linux pro klienta Steam a jejich hry. Od té doby se mno...