Časovače systemd sú výkonným nástrojom, ktorý uľahčuje správu naplánovaných úloh v systémoch Linux. Funkcia časovačov sa môže zdať jednoduchá, ale existujú skryté funkcie, ktoré môžu pomôcť pri vykonávaní úloh flexibilnejšie a efektívnejšie. V tomto článku sa zaoberáme niektorými nezvyčajnými funkciami časovačov systemd, ktoré môžu mať veľký rozdiel v správe systému, od optimalizácie využitia zdrojov až po uľahčenie automatizovanej údržby.

hlavné body
- Časovače systemd majú interné kontroly, ktoré zabraňujú súčasnému spusteniu viacerých inštancií, čo zabraňuje konfliktom zdrojov.
- Povoľte 1-sekundovú presnosť v systemd časovačoch, aby ste zvýšili presnosť v porovnaní s predvolenou 1-minútovou presnosťou.
- Poruchy nahláste prostriedkami podľa vášho výberu. Okamžite spustite časovače a služby, aby ste pomohli ladiť chyby.
Časovače Systemd v systéme Linux majú bohatú a sofistikovanú sadu funkcií. Základné funkcie zvládajú najbežnejšie scenáre, ale môžete prísť o niektoré skvelé funkcie, ako sú tieto málo známe možnosti.
systemd timer
Systemd timer je modernou náhradou za starší príkaz cron. Oba príkazy vám umožňujú naplánovať spustenie úlohy alebo procesu v konkrétnom čase alebo s konkrétnou frekvenciou. Výhodou systemd časovačov je väčšia kontrola, väčšia flexibilita a vyššia presnosť ako u cron časovačov.
Na základe komentárov a otázok, ktoré dostávam, keď o tom hovorím, môžu byť timery systemd jedným z najviac nepochopených prvkov v Linuxe. Dokonca aj keď hovorím s ľuďmi, ktorí uprednostňujú systémové časovače, často nevedia všetky veci na tomto zozname.
Na prvý pohľad sa systémové časovače môžu zdať ťažké. Je potrebné sa naučiť novú syntax konfigurácie, ktorá mnohým vadí. Nevytvoríte len jeden konfiguračný súbor. Každý časovač potrebuje dva samostatné, ale súvisiace súbory.
Časovače systemd sa na prvý pohľad môžu zdať komplikované, alebo len pre tech geekov. Ale v skutočnosti to nie je také zlé. Je škoda, že sa im niektorí ľudia vyhýbajú a držia sa cronu, pretože systemd timery majú veľa skvelých trikov.
1. Jeden prípad naraz
Prvá výhoda systémových časovačov prichádza automaticky. Nemusíte robiť nič, aby ste si to užili. Existujú interné kontroly, ktoré zabraňujú spusteniu časovača, ak predchádzajúci chod toho istého časovača ešte nebol dokončený.
Tým sa zabráni konfliktom prostriedkov a zabráni sa problémom, ktoré by nastali, keby sa napríklad dve úlohy zálohovania pokúsili spustiť súčasne.
Časovače, ktoré nefungujú, nie sú ignorované. Sú udržiavané v pohotovostnom stave a spúšťajú sa po dokončení spusteného časovača. Je to dôležité, pretože sekvenčné ovládanie časovačov je úplne v poriadku. Ide o neplánované súbežné vykonávanie, ktoré môže viesť k neočakávaným vedľajším účinkom.
2. Zapnite druhé presné časovanie
Pomocou cronu môžete plánovať úlohy s presnosťou na 1 minútu. Teraz môžete pomocou systémových časovačov naplánovať spustenie časovačov s presnosťou na jednu sekundu. V skutočnosti môžete použiť mikrosekundovú presnosť, ale mimo špecializovaných scenárov v reálnom čase je ťažké si predstaviť, kedy by ste to mohli potrebovať.
Ale tu ide o to. Časovače systemd predvolene s presnosťou na 1 minútu. Takto musíte zapnúť 1 sekundové rozlíšenie.
[Timer]
AccuracySec=1
3. Použite monotónne udalosti na oneskorené vykonanie
Časovače systemd majú širokú a flexibilnú sadu metód plánovania.
Udalosti kalendára prebiehajú v konkrétnom čase v konkrétnom dni alebo skupine dní a v konkrétnom čase. Pre časovač môžete nastaviť viac ako jeden konkrétny čas, aby ste získali rôzne časy behu počas víkendov a pracovných dní. Je tu tiež priestor pre žiadny čas, čo v skutočnosti znamená „kedykoľvek počas dňa“.
Monotónne udalosti sa spúšťajú po určitom časovom období po udalosti, ako je napríklad zavedenie systému. Môžete tiež nakonfigurovať časovač, ktorý sa spustí v určitom okamihu po jeho aktivácii alebo prekvapivo deaktivácii.
Ak chcete spustiť službu po 45 sekundách od zapnutia počítača, použite tento formát:
[Timer]
OnBootSec=45 seconds
Ďalším šikovným trikom je zapnutie časovača, ak sa zmení čas alebo dátum v systémových hodinách vášho počítača.
[Timer]
OnClockChange=true
4. Manuálne spúšťajte načasované úlohy
Keď vyviniem teplotu, rád to robím po etapách. Najprv sa uistite, že cieľový proces, ktorý chcete spustiť, beží ako nezávislý proces. To znamená, že program, skript alebo príkaz Linuxu, ktorý chcete spustiť, by mal pri použití príkazu v okne terminálu fungovať podľa očakávania.
Po druhé, vytvorím servisný súbor a vložím doň tento príkaz. Nakoniec vytvorím dočasný súbor, ktorý spúšťa súbor služby.
Ak chcete otestovať časovač, môžete ho nastaviť tak, aby sa spustil o niekoľko minút v budúcnosti a počkajte. Funguje to, ale ak to musíte urobiť viackrát, aby veci fungovali, úprava riadku OnCalendar= pri každej zmene bude čoskoro únavná.
Časovač môžete spustiť manuálne, kedykoľvek chcete, aby sa spustil.
sudo systemctl start name-of-your.timer
Funguje to, ale musíte mať na pamäti, že sa tým spustí časovač. Ak však váš riadok OnCalendar= prikáže časovaču spustiť službu prvú stredu v mesiaci, budete musieť počkať, kým sa služba spustí.
Ak naozaj chcete otestovať implementáciu služby, spustite službu.
sudo systemctl start name-of-your.service
Existuje aj podobný príkaz na zastavenie.
sudo systemctl stop name-of-your.service
Upozorňujeme, že ak sú moduly RefuseManualStart alebo RefuseManualStop zahrnuté vo vašom súbore služieb a sú nastavené na Áno, nebudete môcť službu spustiť ani zastaviť manuálne. Ak však ladíte časovač systemd, ktorý ste sami vytvorili, možno ste tieto moduly nezahrnuli. Ak potrebujete, môžete ich počas testu komentovať.
5. Automaticky hlásiť neúspešné služby
Direktívy MAILTO boli jednou z hladších funkcií cronu. Poskytli ste e-mailovú adresu na prijímanie upozornení na chyby alebo zlyhania. Ekvivalent v systemd je o niečo zložitejší, ale ponúka väčšiu flexibilitu. Spôsob upozornenia nemusí byť e-mail. Môžete jednoducho poslať upozornenie napríklad na kanál Slack.
Trik je spustiť inú službu a nechať túto službu spustiť proces, ktorý odošle upozornenie.
Do súboru služby zahrňte direktívu OnFailure= a nastavte ju na názov vašej služby hlásenia chýb. Názov vašej oznamovacej služby by mal končiť znakom „@“, ktorý označuje, že ide o šablónovú službu.
[Unit]
# ...
OnFailure=notify-error@%n.service
Naša služba hlásenia sa nazýva „notify-error@.service“. Ak sa vyskytne chyba a táto služba sa zavolá, názov služby sa pridá za znak „@“ a nahradí symbol „%n“. Tento názov je možné získať v notify-error@.service ako symbol „%i“.
Naša služba notify-error@.service obsahuje:
[Unit]
Description=Report systemd timer errors
[Service]
Type=oneshot
ExecStart=/usr/local/bin/send-to-slack.sh %i
[Install]
WantedBy=multi-user.target
Keď je táto služba spustená, názov volajúcej služby je dostupný cez premennú „%i“. Na mojom zariadení sa to odošle do textového súboru s názvom „send-to-slack.sh“, ktorý vytvorí správu a odošle ju do Slacku. Riadok ExecStart= môže odkazovať na akýkoľvek príkaz, program alebo skript, ktorý máte v počítači.
Konečne
Posledným tipom je použiť nástroj systemd-analyze s možnosťou kalendára na kontrolu a normalizáciu dátumov a časov na použitie vo výkazoch OnCalendar v súbore časovača.
Ak chcete napríklad spustiť časovač o 13:15 každý deň, zadajte čas v príkaze v jednoduchom formáte a nechajte systémd-analyze vygenerovať normálnu verziu.
systemd-analyze calendar 13:15




