Utilia

Generador d'expressions cron

Crea una expressió cron camp per camp, llegeix-la amb paraules, consulta les properes execucions en qualsevol zona horària i converteix-la a systemd o AWS.

Constructor

CampModeValor
Minut0–59
Hora0–23
Dia del mes1–31, L
Mes1–12 o JAN–DEC
Dia de la setmana0–7 (0 i 7 = diumenge) o SUN–SAT

Com crear una expressió cron

  1. Escriu o enganxa una expressió a Expressió cron, o tria’n una de Valors predefinits. Les macros com @daily o @weekly també s’accepten.
  2. O fes servir el Constructor: per a cada camp tria un Mode (Cada, Cada N, Valors concrets, Interval o Personalitzat) i omple el Valor. L’expressió s’actualitza sobre la marxa, i si edites l’expressió s’actualitza el constructor.
  3. Marca Afegeix un camp de segons (6 camps) si el teu planificador admet segons.
  4. Llegeix la planificació Amb paraules (en l’idioma de la pàgina quan la biblioteca de descripcions el permet, i si no en anglès) i després consulta la llista de Properes execucions. Tria la Zona horària del servidor que executa la tasca i Quantes execucions vols veure.
  5. Copia l’expressió amb Copia, o fes servir un dels Altres formats.

Els errors s’expliquen camp per camp, per exemple «Minut: 61 és fora de rang (0–59)», de manera que sàpigues exactament què has de corregir.

Els cinc camps de cron

Una línia de cron estàndard (Vixie) té cinc camps, seguits de l’ordre:

Camp Valors permesos
Minut 0–59
Hora 0–23
Dia del mes 1–31
Mes 1–12 o JAN–DEC
Dia de la setmana 0–7 (0 i 7 són diumenge) o SUN–SAT

Cada camp accepta * (tots els valors), una llista 1,15, un interval 9-17, un pas */15 (cada 15 unitats) o un interval amb pas 0-30/10. Així, */15 9-17 * * 1-5 vol dir cada 15 minuts de 9:00 a 17:45, de dilluns a divendres.

Hi ha una regla que sorprèn molta gent: quan tant el Dia del mes com el Dia de la setmana estan restringits, el cron clàssic s’executa quan coincideix qualsevol dels dos. 0 0 13 * 5 s’executa cada dia 13 i cada divendres, no només els divendres 13. L’eina mostra un avís en aquest cas.

Properes execucions i zones horàries

Cron fa servir el rellotge de la màquina, o el paràmetre CRON_TZ/TZ del crontab. La llista de Properes execucions es calcula per a la zona horària que triïs, incloent-hi els canvis d’horari d’estiu: durant el canvi de primavera una tasca programada a les 2:30 es pot ometre, i a la tardor es pot executar una o dues vegades segons la implementació. Per a les tasques que s’han d’executar exactament una vegada, és preferible triar hores fora de l’interval d‘1:00 a 3:00 o fer servir UTC.

Cron de Vixie, temporitzadors de systemd, Quartz i AWS

  • Els temporitzadors de systemd fan servir OnCalendar= amb una sintaxi diferent: Mon..Fri *-*-* 09..17:00/15:00. Les condicions de dia de la setmana i de data es combinen amb AND, no amb OR, de manera que algunes expressions cron no tenen equivalent exacte.
  • Quartz i Spring posen primer un camp de segons i hi poden afegir un camp d’any. Un dels dos camps de dia ha de ser ?, i Quartz numera els dies de la setmana de l‘1 al 7 a partir del diumenge, a diferència del 0–6 de cron. L’eina escriu els dies de la setmana amb noms (MON-FRI) per evitar aquesta trampa.
  • AWS EventBridge fa servir cron(minuts hores dia mes dia-de-la-setmana any): sis camps, sense segons, un ? en un dels camps de dia i un any al final.

El cron estàndard no té camp de segons. La forma de 6 camps amb segons l’admeten moltes biblioteques (node-cron, Spring, Quartz), però no el crontab del sistema.

Preguntes freqüents

Com executo una tasca cada 5 minuts?

Fes servir */5 * * * *. La tasca s’executa als minuts 0, 5, 10… de cada hora.

Com executo una tasca l'últim dia del mes?

Molts planificadors accepten L al camp de dia del mes: 0 18 L * *. Amb el cron de Vixie pur, executa-la cada dia els dies 28–31 i comprova a l’script si demà és dia 1.

Què fa @reboot?

Executa l’ordre una vegada, quan s’inicia el dimoni de cron. No té planificació, de manera que l’eina no en pot llistar les execucions.

Per què la meva tasca no s'executa a l'hora que es mostra?

Comprova la zona horària del servidor, el crontab de l’usuari en comparació amb /etc/crontab (que té un camp d’usuari addicional) i el PATH: cron s’inicia amb un entorn mínim.

El 0 o el 7 és diumenge?

Tots dos. Al camp de dia de la setmana, 0 i 7 volen dir diumenge, 1 és dilluns i 6 és dissabte.