Hlídač nočních úloh mi hned našel tři mrtvé

Doma se mi každou noc spouští 63 úloh. Postavil jsem si obrazovku, která ukáže všechny naráz. Tři z nich byly týden po smrti.

9. října 2026· 7 min čtení

Ve čtvrtek 18. 9. večer, když už děti spaly, jsem si sedl a poprvé sepsal všechno, co se u nás doma spouští samo. Čekal jsem nudný seznam. U tří řádků mi ale vyšlo, že poslední povedený běh je starý týden. Jedna z nich se za ten týden pokusila naběhnout sedmkrát a sedmkrát umřela, aniž by si toho kdokoli všiml. Hlídání, které jsem kolem toho postavil, mě pak stálo 0 Kč, protože běží na serveru, který doma bzučí tak jako tak.

63
úloh se spouští samo, na osmi strojích
3
mrtvé, o kterých jsem nevěděl
15 min
jak často se sbírá stav

Doma se toho v noci děje víc, než jsem čekal

Chytrá domácnost není jen to, co vidíš na zdi. Pod tím vším běží obyčejné naplánované úlohy. Ve 3:30 se zálohuje databáze. Ve 4:00 si trezor s poznámkami odtáhne kopii jinam. Ráno se do nákupního seznamu propíše, co došlo, a rozvrh ze školy se stahuje třikrát denně. Nic z toho nesvítí a nic z toho necinká.

Když jsem si to poprvé spočítal, vyšlo mi 63 úloh na osmi strojích. Do té doby jsem každou z nich kontroloval tak, že jsem si na ni vzpomněl. To není systém, to je štěstí.

Co běžíKolik toho je
Naplánované úlohy systemd47
Úlohy agenta, který mi třídí poštu8
Externí kontroly, které samy křičí8
Z toho zapnutých60
Vypnutých schválně3

Co ta obrazovka umí

Jeden seznam, jeden řádek na úlohu. U každé je vidět, kdy běžela naposledy, jak dopadla, kdy poběží příště a jestli je vůbec zapnutá. Nic víc. Žádné grafy, žádná historie, protože to už si umí každý stroj sám.

Důležitá je jedna věc: stav se nikam neukládá. Dopočítá se až ve chvíli, kdy se na obrazovku podívám. Když se sběr na hodinu rozbije, uvidím, že data jsou stará, a ne uklidňující zelenou z minulého týdne.

Co na to potřebuješ

  • Server, který ti doma stejně běží. U mě Proxmox, ale je to jedno. 0 Kč navíc.
  • systemd. Máš ho v každém Linuxu, umí plánovat i hlásit. 0 Kč.
  • Healthchecks. Hlídací služba, která čeká na zavolání a když nepřijde, ozve se sama. Dá se provozovat doma zdarma a do 26. 9. jsem ji tak měl i já. Placená varianta v cloudu začíná kolem 5 USD měsíčně, tu nepotřebuješ.
  • Půl večera. U mě to byly tři hodiny včetně chyb popsaných níž.

Celé to tedy stálo nula korun a jeden večer. Jediná investice byla, že jsem si konečně sedl a sepsal, co u nás doma vlastně běží.

Jak jsem to postavil

Nejdřív inventura. Projel jsem všechny stroje a vypsal, co má naplánovaný běh. Právě tahle nudná část odhalila ty tři mrtvé úlohy, ještě než vznikl řádek kódu. Kdybych skončil tady, vyplatilo by se to.

Pak sběrač. Malý skript na hostiteli, každých 15 minut se zeptá každého kontejneru na stav jeho úloh a pošle to do jedné tabulky.

Nakonec hlídání zvenčí. Úloha po sobě zavolá na adresu hlídací služby. Když zavolání nepřijde do dohodnutého času, služba mi napíše. Tohle je ta část, kterou doporučuju udělat první, i kdyby ses na obrazovku vykašlal:

# /etc/systemd/system/zaloha.service
[Unit]
Description=Nocni zaloha
OnFailure=hlaska-o-selhani@%n.service

[Service]
Type=oneshot
ExecStart=/opt/skripty/zaloha.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 --retry 3 https://hlidac.doma/ping/ID-KONTROLY

Dva řádky, dva různé druhy ochrany. ExecStartPost řekne hlídači, že se to povedlo. OnFailure zavolá vlastní službu ve chvíli, kdy to spadne. Bez toho druhého řádku systemd selhání jen zapíše do logu a mlčí dál.

Tohle mám od 19. 9. u všech 47 úloh. Zprávu neposílá stroj, na kterém to spadlo, ale hlídací služba, takže klíč k Telegramu leží na jednom místě a ne v osmi kontejnerech. Každá úloha zná jen adresu své vlastní kontroly.

Jedna věc mě přitom málem doběhla. Každá úloha potřebuje vlastní kontrolu, ne jednu společnou. Hlídací služba totiž píše jen při změně stavu, takže kdyby všechny úlohy sdílely jednu, druhý pád by byl zase tichý. A přesně o to tady celou dobu jde.

Kde jsem se sekl: monitor mi začal hlídat uvítací nápis

Do seznamu úloh se mi na jednom kontejneru nastěhovalo pět řádků, které vypadaly takhle: "Spoolman LXC Container", "OS: Debian GNU/Linux" a tak dál. Můj hlídač začal hlídat uvítací obrázek, který se vypíše po přihlášení.

Našel jsem to až o den později, když jsem si pro tenhle zápisek ověřoval čísla proti databázi. Příčina je hloupá a stojí za zapamatování. Spouštěl jsem příkazy jako přihlašovací shell, takže se nejdřív vypsal uvítací nápis a teprve pak výsledek. Můj kód bral za úlohu každý řádek, který nepoznal, místo aby bral jen ty, co končí na .timer. Filtr, který vyhazuje známé smetí, je vždycky slabší než filtr, který pouští jen známý tvar. Opravené to bylo za deset minut, ale hledal jsem to půl hodiny.

Tři menší pasti z toho prvního večera, ať je nemusíš potkat taky:

  • systemctl show --value vrací hodnoty v pořadí, které si zvolí systemd, ne v tom, v jakém se ptáš. A prázdná hodnota nezabere řádek, takže se ti všechno posune. Kvůli tomu mi 43 zapnutých úloh chvíli svítilo jako vypnuté. Řešení je ptát se na dvojice KLIC=hodnota.
  • systemctl list-timers má v posledním sloupci název služby, ne časovače. Když bereš poslední sloupec, dostaneš .service a divíš se, proč nic nesedí.
  • Dva moje kontejnery běží v UTC, zbytek v našem čase. Čtyři úlohy proto vypadaly dvě hodiny opožděně, i když běžely přesně.

Jak to vypadá po prvním dni

Poctivě: běží to od 18. 9., takže tvrdit cokoli o dlouhodobé spolehlivosti by bylo vymýšlení. Čísla za měsíc sem doplním 18. 10.

Co vím teď: 63 úloh, 60 zapnutých, za posledních sedm dní nula selhání. Jedna kontrola je ale právě teď červená, a je to poučné. Vypnul jsem úlohu, kterou už nepotřebuju, ale hlídač na ni pořád čeká a hlásí, že se neozvala. Vypnutí úlohy je tedy dvoukrokové. Když na druhý krok zapomeneš, vychováš si hlídače, kterého začneš ignorovat, a to je nejhorší možný stav.

Zvládne to zbytek rodiny?

Tohle je jediná obrazovka v domě, kterou manželka nikdy neotevře, a je to tak správně. Nikdo doma nechce vědět, že se ve 4:00 kopírovala databáze.

Rodina to pozná jinak. Když padne úloha od nákupního seznamu, v sobotu chybí věci. Když se rozbije stahování rozvrhu, starší jde do školy podle včerejška. Ty tři mrtvé úlohy naštěstí nebyly z týhle kategorie, protože mi shodou okolností umřely věci kolem tohohle blogu. Kdyby to byl kalendář ze školy, přišel bych na to stejně, jen nepříjemněji.

Co bych udělal jinak

  • Začal bych hlídáním zvenčí, ne obrazovkou. Obrazovka ukáže problém, až se na ni podívám. Hlídač zavolá sám.
  • Napsal bych si OnFailure= do každé úlohy hned na začátku. Doplnil jsem ho až druhý den, do všech 47 úloh naráz, a je to přesně ta věc, kvůli které ty tři umíraly potichu.
  • Nepsal bych filtr na smetí. Vždycky bych psal filtr na známý tvar.
  • Udělal bych inventuru dřív. Samotné sepsání, co u nás běží, mělo větší hodnotu než celý zbytek večera.
  • Nespoléhal bych na to, že si vzpomenu. Půl roku jsem věřil, že o svém domě vím všechno. Kolik úloh mi v něm běží, jsem zjistil až ten čtvrtek večer.

Kolik naplánovaných úloh ti běží doma a kdy ses na ně naposledy koukal?

Sousední díl: Dům, který sám zavolá dřív, než teče, o vrstvě hlídačů na vodu, vzduch a baterie.

sdílej
FacebookWhatsApp

Screenshotni a taguj @tatkatech, rád to sdílím ve stories.

Taťka

Píšu o domě, ve kterém bydlíme. Home Assistant na Proxmoxu, 2 900+ entit, fotovoltaika s baterií, tepelné čerpadlo, rekuperace přes Modbus, závlaha po zónách a dvě děti, které to všechno testují líp než já.

Občanské jméno tady nenajdeš, ale všechno ostatní je skutečné.

ahoj@tatka.tech·@tatkatech

checklist zdarma

Stáhni si checklist zdarma

10 věcí, co koupit do chytré domácnosti jako první: a 5 zbytečností, co na začátku přeskočit. Nech mi mail, pošlu ti PDF a dám vědět, až vyjde placený průvodce.

Žádný spam. PDF hned a pak jedna zpráva, až vyjde placený průvodce.