bitlvl
IT

Convertitore cron ⇄ timer systemd

Incolla una riga crontab completa, pianificazione e comando, e ottieni i due file delle unit più i comandi di installazione. Oppure incolla una riga OnCalendar per ottenere l’equivalente cron.

Unit timer

 

Unit service

 

Installazione

 

Inverso: OnCalendar → cron

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Cron contro timer systemd

crontimer systemd
DefinizioneUna riga in un crontabDue file: .timer (quando) e .service (cosa)
Esecuzioni mancatePerse (salvo anacron)Persistent=true le esegue al prossimo avvio
AmbientePATH minimale, nessun profilo; output spedito via mailDefinito nella unit; output nel journal
SovrapposizioneRiparte anche se l’esecuzione precedente è ancora in corsoMai: un timer aspetta che il suo service finisca
DipendenzeNessunaAfter=network-online.target, mount, altre unit
Limiti di risorse, sandboxingNoTutti quelli di systemd: MemoryMax, CPUQuota, ProtectSystem…
Ispezionecrontab -l, grep nel syslogsystemctl list-timers, journalctl -u, systemctl status
SemplicitàUna rigaVenti righe

Per una riga singola su una macchina personale, cron va bene. Per qualsiasi cosa su un server che non deve sovrapporsi, deve recuperare dopo un fermo, ha bisogno di limiti, o i cui log qualcuno leggerà in seguito, un timer è lo strumento migliore, e il convertitore scrive il boilerplate.

Cosa fa il convertitore con il comando

ExecStart= richiede un percorso assoluto e argomenti, non una riga di shell. Le redirezioni (>> log 2>&1) vengono eliminate perché il journal cattura l’output; pipe e && vengono racchiusi in /bin/sh -c '…'. La regola di cron per cui % significa a capo non si applica, quindi date +%F funziona così com’è. Le variabili d’ambiente impostate nel crontab vanno in righe Environment=.

Giorno del mese e giorno della settimana

Se una riga cron limita entrambi, cron scatta quando uno dei due corrisponde; systemd richiede entrambi. Il convertitore avvisa, perché quella pianificazione richiede due timer per essere riprodotta.

Domande

Dove vanno i file?

/etc/systemd/system/ per le unit di sistema, ~/.config/systemd/user/ per le unit utente (poi usa systemctl --user e loginctl enable-linger). Esegui systemctl daemon-reload dopo aver aggiunto o modificato.

Come vedo quando girerà la prossima volta?

systemctl list-timers --all mostra la prossima e l’ultima esecuzione di ogni timer. systemd-analyze calendar "espr" mostra la prossima scadenza di qualsiasi espressione OnCalendar.

Come lo eseguo adesso, senza aspettare?

systemctl start nome.service (non il timer). Il timer mantiene la propria pianificazione.

Un timer può girare ogni 10 secondi?

Sì, con OnCalendar=*:*:0/10 e AccuracySec=1s, oppure con OnUnitActiveSec=10s per «10 secondi dopo la fine dell’ultima esecuzione». Cron non può scendere sotto il minuto.