Ehita cron-avaldis

ehitab cron-avaldise visuaalsetest väljadest või eelseatuist (iga minut, tunnis, päevas, nädalas...)

Miks visuaalne kroniehitaja?

croni avaldis sisaldab viit välja ja on siiski üks enim genereerivaid väljasid vead tootmises. Mitu korda on arendaja kirjutanud 0 0 * * 1, mõeldes „iga esmaspäeviti", jätmata meelde, et 1 võib olenevalt rakendustest tähendada pühapäeva? Kui palju kas oleme ajanud segamini */15 ja 15? Sellele vastab croni koostaja vajadus: koostage visuaalselt crontab avaldis praegustest eelseadetest või üksikute väljade kohta ja valmistage lõplik avaldis valmis kleepimiseks Linuxi crontabi, Kubernetesesse CronJob või GitHubi toimingute ajakava.

Tööriist on vastupidine meie cron-dekoodrile: kuhu muundur võtab väljend ja viib läbi järgmised hukkamised, ehitaja võtab inimeste valikud ja toodab vastav cron avaldis.

Kuidas see toimib

Graafiline liides pakub kahte üksteist täiendavat kompositsioonirežiimi:

  • Eelseadistatud režiim: sageduse valija (iga minut, iga tund, iga päev, iga nädal, iga kuu, igal aastal, kohandatud), mis loob kohe croni avaldise kehtiv.
  • Välirežiim: viis muudetavat välja (minut, tund, kuu päev, kuu, päev nädal), kuhu sisestate vabalt *, täisarvu, vahemiku 1-5, loendi 1,15,30 või samm */15.

Ehitaja värskendab väljendit reaalajas ja kuvab lühidalt inimliku näidu ("iga päev kell 3:00", "iga 15 minuti järel"), mis toimib kaitsemeetmena: kui lause ei vasta teie kavatsusele, väljend on ilmselt vale.

Viis kroonvälja, lihtsas keeles

Standardne croni avaldis sisaldab viit tühikutega eraldatud välja:

minut tund-kuu päev-kuu-nädalapäev
* * * * *
  • minut (0 kuni 59);
  • tund (0 kuni 23);
  • kuu päev (1. kuni 31.);
  • kuu (1–12 või lühendid jaanuar, veebruar jne);
  • nädalapäev (0 kuni 7, 0 ja 7 on enamasti pühapäev teostused).

Igal väljal on mitu vormi: * (kõik väärtused), konkreetne täisarv (5), loend (1,3,5), vahemik (9–17), samm (*/15 iga 15 väärtuse järel) või kombinatsiooni (0-30/5).

Tüüpilised kasutusjuhud

  • Arendaja, kes õpib cron: visualiseerige, kuidas iga väli interakteerub, ilma riskimata valeväljend tootmises.
  • Süsadmin kiirustab: looge mõne sekundiga ajakava Linuxi cronile, Kubernetes CronJob või Ansible töö ilma man-lehte uuesti lugemata.
  • POSIX-i kogemuseta arendaja: looge crontab-avaldis kehtib Symfony Scheduleri, Laraveli ajakava või node-croni jaoks ilma ajaloolist süntaksit teadmata.
  • DevOps on ülevaatamisel: kiirelt prototüüp avaldise jaoks, et seda tõmbes välja pakkuda päring, seejärel kinnitage see cron-dekoodriga.
  • Pärandi üleviimine: ajaloolise croni avaldise ümbersõnastamine koostaja abil et tagada semantika enne selle mujale lükkamist.

Ühised eelseaded

Eelseade valimine kirjutab üksikud väljad üle ja loob vastava avaldise:

  • Iga minut: * * * * *. Vältige tootmises, kui see pole vajalik eriti.
  • Iga tund: 0 * * * *. Iga tunni alguses.
  • Iga päev: 0 0 * * *. Keskööl.
  • Iga nädal: 0 0 * * 0. Igal pühapäeval südaööl.
  • Iga kuu: 0 0 1 * *. 1. kuu südaööl.
  • Iga aasta: 0 0 1 1 *. 1. jaanuari südaööl.

Levinud mustrid, mida teada

Avaldis Inimlik lugemine
0 0 * * * Iga päev südaööl
*/15 * * * * Iga 15 minuti järel
0 9 * * 1-5 Igal tööpäeval kell 9.00
0 0 1 * * Kuu 1. päeval keskööl
0 0 * * 0 Igal pühapäeval südaööl
*/5 9-17 * * 1-5 Iga 5 minuti järel tööajal
0 3 * * * Iga päev kell 3:00
30 2 1,15 * * Kuu 1. ja 15. päeval kell 2.30

Koostage kohandatud avaldis

Täpsemate juhtumite korral avab viisard viis välja tasuta sisenemiseks. Mõned näited kasulik:

  • Iga päev kell 3:00: minut=0, tund=3, muud * väljad.
  • Iga 15 minuti järel: minut=*/15, muud väljad *.
  • Esmaspäevast reedeni kell 9:00: minut=0, tund=9, day-of-the-week=1-5.
  • Iga kuu 1. ja 15. päeva keskpäeval: minut=0, tund=12, day-of-month=1.15.
  • Iga 5 minuti järel ajavahemikus 9.00–17.00: minut=*/5, time=9-17.

Kuidas kasutada cron builderit

  1. Valige eelseadistus (iga minut, iga tund, iga päev, iga nädal, iga kuu, igal aastal) mis vastab teie vajaduse alusele.
  2. Vajadusel täpsustage viit välja otse redigeerides (minut, tund, kuu päev, kuu, päev nädalast).
  3. Kavatsuse kinnitamiseks lugege tööriista loodud inimlauset.
  4. Kopeerige kopeerimisnupu abil loodud croni avaldis.
  5. Kinnitage ajakava meie cron-dekoodriga, mis arvutab järgmised tegelikud täitmise kuupäevad.
  6. Kleebi avaldis oma Linuxi crontabi, Kubernetes CronJobi, Symfony ajakavasse või oma GitHubi toimingute töövoogu.

Klassikalised püünised

  • Kuupäev ja nädalapäev kokku: kui mõlemad ei ole *, käitumine on rakenduste vahel erinev. Linux/Vixie cron rakendab OR; a Kaasaegsed raamatukogud käituvad mõnikord teisiti. Vältimaks.
  • 1. päev = esmaspäev või pühapäev?: olenevalt riigist ja kokkuleppest. Enamik kron Unix arvestab pühapäeva=0 ja laupäeva=6. Kontrollige oma planeerijat.
  • Ajavöönd: Unixi cron kasutab vaikimisi serveri ajavööndit. The Rakenduste planeerijad (Symfony Scheduler, Quartz) võimaldavad teil sageli määrata spetsiaalse ajavööndi.
  • Puuduv minut: * * * * * käivitab töö iga minuti järel, mis on harva see, mida me tahame. Kaaluge konkreetse päästiku (0) määramist tunniülesanded.

Inimese lugemine ja väljund

Lisaks väljendile cron pakub tööriist lühidalt inimlikku lugemist (“kõik päeva keskööl", "iga 5 minuti järel"). See on kaitsemeede: kui lause ei vasta teie omale kavatsus, on väljend tõenäoliselt vale. Keerulise juhtumi puhul kasutage meie cron-dekooder järgmiste tegelike täitmiskuupäevade arvutamiseks.

Korduma kippuvad küsimused

Kas ma saan pärast liidese kasutamist avaldist käsitsi muuta?

Jah. Koostaja ei ole eksklusiivne režiim: viis välja jäävad igal ajal redigeeritavateks. Sina saab alustada eelseadistusest, seejärel kohandage välja käsitsi, et saadacrontab kohandatud väljendus. Inimese näit arvutatakse kohe ümber.

Kas tööriist toetab 6-välja kvartsi vormingut (sekunditega)?

Ei: 5-välja vorming on Unixi standard ja enamiku planeerijate jaoks ühine alus (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). Quartz (Java) aktsepteerib lisavälja sekundite ja konkreetsete sümbolite jaoks (?, L, W, #), kuid see vajadus jääb harvaks.

Kuidas ajavööndit hallatakse?

Ehitaja loob neutraalse cron-avaldise: mootor, mis täidab tööd, rakendab seda ajavöönd. Linuxi crontabis on see serveri TZ. GitHub Actionsis on see UTC. Sees Kubernetes 1.27+, saate manifestis määrata spec.timeZone. Symfony Scheduler ja Kvarts paljastab iga ülesande jaoks spetsiaalse ajavööndi.

Kuidas kinnitada avaldist ilma seda tootmisrežiimis käivitamata?

Kasutage meie cron-dekoodrit. See arvutab järgmise N täitmist praegusest hetkest, tööle asumata. See on parim viis kinnitada, et a cron avaldis käivitub kavandatud ajal enne selle juurutamist.

Mis on sellel pistmist Symfony Scheduleriga?

Symfony Scheduler aktsepteerib 5-väljalisi cron-avaldisi läbi Schedule::cron('0 3 * * *', ...) . Ehitaja loodud avaldise saab seetõttu kleepida nii, nagu see on. Sama ka Laraveliga Planeerija (->cron('...')), node-cron, Hangfire ja Airflow.

Kas käsk peaks olema süsteemi crontabis eesliide?

Jah, failis /etc/crontab on teil vaja kasutajat (0 3 * * * www-data /usr/bin/php ...), samas kui crontab -e kasutaja kohta jätab selle välja. Väljend ise jääb identsed.

Päringunäide

curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
  -H "Content-Type: application/json" \
  -d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'

Sisendskeem

Väli Tüüp Kohustuslik Vaikimisi
preset choice (none, every_minute, hourly, daily, weekly, monthly, yearly) none
minute string *
hour string *
day_of_month string *
month string *
day_of_week string *

Lõpp-punktid

  • GET https://cdrn.fr/api/v1/tools - loetleb kõik saadaolevad tööriistad
  • GET https://cdrn.fr/api/v1/tools/cron-builder - toob selle tööriista skeemi
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - täidab selle tööriista JSON-payloadiga