Psa krmí granule, web cron joby: Úvod do scheduled tasků na Linuxu i Windows webseidon Lukáš Adámek webdeveloper Klokočov Vítkov Fulnek Odry

Psa krmí granule, web cron joby: Úvod do scheduled tasků na Linuxu i Windows

Psa krmí granule, web cron joby: Úvod do scheduled tasků na Linuxu i Windows

Psa krmí granule, web cron joby: Úvod do scheduled tasků na Linuxu i Windows

Arwen (můj toy pudl) dostává granule přesný čas – dávkovač na Wi‑Fi a cron job. Stejnou disciplínu potřebuje i tvůj server: zálohy, logrotace, monitorovací pingy. V tomhle článku se naučíš plánovat úlohy na Linuxu (cron) i Windows (Task Scheduler), debugovat je a chránit před malwarem či lidskou chybou. Prostě psí miska informací.



1 · Proč automatizovat: čas, peníze, jistota

  • Zero oops faktor – ruční úlohy = zapomenuté úlohy.
  • Opakovatelnost – stejný skript na testu i produkci.
  • Snížení nákladů – méně hodin ruční správy.
  • SLA & compliance – pravidelné zálohy = audit spokojenej.

2 · Architektura plánovačů: kernel, daemon, scheduler

Linux: kernel → crond daemon → čte /etc/crontab, /etc/cron.*, uživatelské crony.

Windows: kernel → Taskschd.dll → services.exe → plánovač spouští SCM nebo cmd/PowerShell.


3 · Linux cron: od *pěti hvězdiček* k systemd‑timerům

3.1 Základní syntaxe

# m h dom mon dow  command
0 3 * * 1   /usr/local/bin/backup.sh
*/5 * * * * /usr/bin/certbot renew --quiet

3.2 Crontab pro uživatele

crontab -e uloží do /var/spool/cron/$USER. Dávej pozor na PATHMAILTO.

3.3 systemd timer (moderní alternativa)

# /etc/systemd/system/logrotate.timer
[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Výhoda: jednotné logy journalctl -u logrotate.timer, závislosti a restarty.


4 · Windows Task Scheduler: základní i pokročilé triggery

4.1 Vytvoření úlohy (GUI)

  1. Task Scheduler → Action → Create Task…
  2. Trigger: Daily 02:00, Repeat every 5 minutes for 1 hour.
  3. Action: Program/script: pwsh; Arguments: -File C:\Scripts\CleanTemp.ps1
  4. Conditions: Wake the computer.
  5. Settings: Stop task if >1 h.

4.2 PowerShell one‑liner

$A = New-ScheduledTaskAction -Execute "backup.bat"
$T = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "NightlyBackup" -Action $A -Trigger $T -User "SYSTEM" -RunLevel Highest

4.3 Event‑triggered task

XML filter: <Query><Select Path="System">*</Select></Query> pro Event ID 7031 (crash). Spustí restart script okamžitě.


5 · Praktické skripty: záloha, logrotace, SSL renew

5.1 Bash – databázová záloha + gzip + rsync off‑site

#!/bin/bash
D=$(date +%F_%H%M)
pg_dumpall | gzip > /backups/pg_$D.sql.gz
rsync -a --delete /backups/ remote:/backups/$(hostname)/
find /backups -mtime +14 -delete

5.2 PowerShell – úklid tempů starších 30 dní

$limit=(Get-Date).AddDays(-30)
gci $env:TEMP -Recurse | ? LastWriteTime -lt $limit | Remove-Item -Recurse -Force

5.3 Certbot renew hook

certbot renew --pre-hook "systemctl stop nginx" \
              --post-hook "systemctl start nginx"

6 · Logování, alerty a health‑checky

  • Linux: Redirect stdout/stderr > /var/log/job.log 2>&1
  • Windows: Task History + Start-Transcript.
  • Alerty: Healthchecks.io ping v post‑hooku. Pokud se job neozve, přijde e‑mail/Slack.
  • Grafana: Promtail čte logy, Loki → Grafana panel „Failed Jobs“.

7 · Bezpečnost: least privilege, antivir, podpis

  • U cron jobu použij dedikovaného uživatele (backup), ne root.
  • Ve Windows nastav Run whether user is logged on or not, user = svc_backup bez interactive logon.
  • Digitálně podepiš PowerShell skripty, ExecutionPolicy AllSigned.
  • Antivirus: whiteli­stuj cestu skriptů, ale skenuj výstupní archivy.
  • Rotate access tokeny (AWS CLI, AzCopy) každých 90 dní.

8 · Case study: Webseidon.cz – 32 jobů, 0 výpadků

KategoriePočet jobůFrekvenceTechnologie
Zálohy DB/Web7DailyBash + cron
Logrotace5Hourlysystemd‑timer
SSL renew2WeeklyCertbot
Windows úklid8DailyTask Scheduler
Monitoring ping10*/5 mincurl → Healthchecks.io

Za rok: 11 000+ spuštění, 0 kritických selhání, ušetřený čas ≈ 120 h administrace.


9 · Troubleshooting: Proč job neběží?

Špatná PATH
cron nemá /usr/local/bin; přidej PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin.
CRLF vs. LF
Windows řádky v Linux crontab způsobí bad minute. Převod dos2unix.
Task “running” navždy
Skript čeká na input. Přidej -NoProfile -NonInteractive v PowerShellu.
Exit code 127
Příkaz nenalezen; plná cesta binárky.

10 · Best practices & CI/CD integrace

  • Všechny crony a Tasky jako kód – repo infra‑scheduler.
  • Git pre‑commit hook validuje crontab výraz (cron‑validator).
  • CI pipeline nasadí nové joby (crontab cronfile/Register‑ScheduledTask), provede suchý běh.
  • Verzuj skripty + hash v logu ⇒ integrita.
  • Nepojmenovávej joby „novy_test2“; popis = RPO!

11 · Závěr

Cron a Task Scheduler jsou neúnavní hlídači, co nikdy nespí – pokud jim správně nastavíš budík. Dodrž principy least privilege, loguj každé štěknutí a testuj restore stejně pečlivě, jako krmíš svého psa. Pak můžeš jít v klidu ven; server si granule načasuje sám.


Klíčová slova

cron joby,scheduled task,linux cron,windows task scheduler,automatizace,skriptování,údržba serveru,backup script,monitoring cron,powershell task,crontab návod,plánovač úloh

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32