bitlvl
SR

Konvertor cron ⇄ systemd tajmer

Nalepite celu crontab liniju, raspored i komandu, i dobijte obe unit datoteke plus komande za instalaciju. Ili nalepite OnCalendar liniju da dobijete cron ekvivalent.

Timer unit

 

Service unit

 

Instalacija

 

Obrnuto: OnCalendar → cron

Rezultati i poruke ovog alata prikazuju se na engleskom.

Cron naspram systemd tajmera

cronsystemd tajmer
DefinicijaJedna linija u crontab-uDve datoteke: .timer (kada) i .service (šta)
Propuštena pokretanjaIzgubljena (osim uz anacron)Persistent=true ih pokreće pri sledećem podizanju sistema
OkruženjeMinimalni PATH, bez profila; izlaz se šalje mejlomDefinisano u unitu; izlaz ide u journal
PreklapanjePokreće se ponovo čak i ako prethodno pokretanje još trajeNikad se ne preklapa: tajmer čeka da njegov servis završi
ZavisnostiNemaAfter=network-online.target, mount tačke, drugi uniti
Ograničenja resursa, sandboxingNeSve što systemd nudi: MemoryMax, CPUQuota, ProtectSystem…
Pregledcrontab -l, grep po syslog-usystemctl list-timers, journalctl -u, systemctl status
JednostavnostJedna linijaDvadeset 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.