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 PATH a MAILTO.
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)
- Task Scheduler → Action → Create Task…
- Trigger: Daily 02:00, Repeat every 5 minutes for 1 hour.
- Action:
Program/script: pwsh;Arguments: -File C:\Scripts\CleanTemp.ps1 - Conditions: Wake the computer.
- 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), neroot. - Ve Windows nastav Run whether user is logged on or not, user =
svc_backupbez interactive logon. - Digitálně podepiš PowerShell skripty, ExecutionPolicy
AllSigned. - Antivirus: whitelistuj 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ů
| Kategorie | Počet jobů | Frekvence | Technologie |
|---|---|---|---|
| Zálohy DB/Web | 7 | Daily | Bash + cron |
| Logrotace | 5 | Hourly | systemd‑timer |
| SSL renew | 2 | Weekly | Certbot |
| Windows úklid | 8 | Daily | Task Scheduler |
| Monitoring ping | 10 | */5 min | curl → 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řidejPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin. - CRLF vs. LF
- Windows řádky v Linux crontab způsobí
bad minute. Převoddos2unix. - Task “running” navždy
- Skript čeká na input. Přidej
-NoProfile -NonInteractivev 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




