Cron naspram systemd tajmera
| cron | systemd tajmer | |
|---|---|---|
| Definicija | Jedna linija u crontab-u | Dve datoteke: .timer (kada) i .service (šta) |
| Propuštena pokretanja | Izgubljena (osim uz anacron) | Persistent=true ih pokreće pri sledećem podizanju sistema |
| Okruženje | Minimalni PATH, bez profila; izlaz se šalje mejlom | Definisano u unitu; izlaz ide u journal |
| Preklapanje | Pokreće se ponovo čak i ako prethodno pokretanje još traje | Nikad se ne preklapa: tajmer čeka da njegov servis završi |
| Zavisnosti | Nema | After=network-online.target, mount tačke, drugi uniti |
| Ograničenja resursa, sandboxing | Ne | Sve što systemd nudi: MemoryMax, CPUQuota, ProtectSystem… |
| Pregled | crontab -l, grep po syslog-u | systemctl list-timers, journalctl -u, systemctl status |
| Jednostavnost | Jedna linija | Dvadeset linija |
Za jednolinijski zadatak na ličnoj mašini cron je sasvim dobar. Za bilo šta na serveru što ne sme da se preklapa, mora da nadoknadi propušteno posle zastoja, treba mu ograničenja, ili čije će logove neko kasnije čitati, tajmer je bolji alat, a konvertor piše šablonski deo.
Šta konvertor radi sa komandom
ExecStart= prima apsolutnu putanju i argumente, a ne liniju školjke. Preusmerenja (>> log 2>&1) se izbacuju jer journal hvata izlaz; pajpovi i && se umotavaju u /bin/sh -c '…'. Cron pravilo da % znači novi red ne važi, pa date +%F radi kako je napisano. Promenljive okruženja postavljene u crontab-u idu u Environment= linije.
Dan u mesecu i dan u nedelji
Ako cron linija ograničava oba, cron se okida kad se bilo koji poklopi; systemd zahteva oba. Konvertor upozorava, jer je za reprodukciju tog rasporeda potrebno dva tajmera.
Pitanja
Gde idu datoteke?
/etc/systemd/system/ za sistemske unite, ~/.config/systemd/user/ za korisničke unite (zatim koristite systemctl --user i loginctl enable-linger). Pokrenite systemctl daemon-reload posle dodavanja ili izmene.
Kako da vidim kada će se sledeći put pokrenuti?
systemctl list-timers --all prikazuje sledeće i poslednje pokretanje svakog tajmera. systemd-analyze calendar "izraz" prikazuje sledeći trenutak okidanja za bilo koji OnCalendar izraz.
Kako da ga pokrenem odmah, bez čekanja?
systemctl start ime.service (ne tajmer). Tajmer zadržava svoj raspored.
Može li tajmer da se pokreće svakih 10 sekundi?
Da, sa OnCalendar=*:*:0/10 i AccuracySec=1s, ili sa OnUnitActiveSec=10s za „10 sekundi nakon što se poslednje pokretanje završilo“. Cron ne može ispod jednog minuta.