Webwerwe kan geskeduleerde take met Cron uitvoer

klok

Ons het 'n aantal oortollige moniteringstelsels aan die werk wat gereeld prosesse uitvoer. Sommige hardloop elke minuut, ander een keer per nag, afhangende van wat hulle doen. Ons kan byvoorbeeld 'n teks uitvoer wat alle klante wat nie binne 30 dae 'n aankoop gedoen het, uitvoer om 'n koepon vir hulle te stuur nie.

In plaas daarvan om al hierdie met die hand te probeer byhou, is dit baie makliker om werk te bou wat outomaties geskeduleer en uitgevoer word. Op Unix-gebaseerde stelsels word dit bereik met Cron. Vir mense wat weet wat u doen, kan u my en die lesers gerus opvoed as ek enige disinformasie gooi.

Dit is jammer, maar die tipiese webontwikkelaar ken Cron glad nie. Selfs al is dit, bied webhostingondernemings dikwels nie toegang tot of ondersteuning van Cron nie. My gasheer is een van die laasgenoemde - hulle laat jou toe om dit te gebruik, maar hulle ondersteun dit nie.

Wat is Cron?

cron is vernoem na die Griekse woord Chronos, wat beteken tyd. Cron loop in 'n deurlopende lus om take uit te voer wat deur Crontab (miskien genoem na) opgegaar word tabulator. Daar word gewoonlik na Cronjobs verwys na hierdie take en kan verwys na skrifte op u werf.

Kroondiagram Verduideliking

Hoe stel ek die Crontab op

Dit kan moeilik wees om Cron te laat hardloop, dus dit is wat ek geleer het en waarvoor ek dit gedoen het As suig:

  1. Ek het my script opgestel om Twitter's na te gaan API om te sien of iemand daarop geantwoord het @ifsuck. Ek het die boodskappe vergelyk met die boodskappe wat ek al op die webwerf gestoor het, en enige nuwe boodskappe ingevoer.
  2. Nadat die script gewerk het, het ek die gebruiker toestemming gegee om die script uit te voer (744) en het die scriptverwysing by my Cronjob-lêer gevoeg - later meer daaroor.
  3. Ek moes dan via SSH by my webwerf aanmeld. Op 'n Mac is die opening van Terminal nodig en tik SSH-gebruikersnaam@domein.com waar gebruikersnaam die gebruikersnaam was wat ek wou gebruik en domein die webwerf. Ek word toe gevra en die wagwoord gegee.
  4. Ek het toe probeer om die script direk vanaf die opdragprompt uit te voer deur die lêernaam en relatiewe pad op die bediener in te tik: /var/www/html/myscript.php
  5. Nadat ek dit reg gekry het, het ek die nodige Unix-kode in die eerste reël van die lêer bygevoeg: #! / usr / bin / php -q . Ek glo dat dit eenvoudig vir Unix sê om PHP te gebruik om die script uit te voer.
  6. Op die Terminal-opdraglyn het ek getik crontab (ander sal dalk moet tik crontab-e) en druk enter ... en dit was al wat nodig was!

Sintaksis vir u Cronjob-lêer

Met betrekking tot nr. 2 hierbo, gebruik Cron 'n vernuftige skema om te bepaal wanneer u draaiboeke uitgevoer sal word. In werklikheid kan u dit in u Cronfile kopieer en plak (op my gasheer, dit is geleë in / var / spoel / cron / met die lêernaam dieselfde as my gebruikersnaam).

# + —————-- minuut (0 - 59)
# | + ————- uur (0 - 23)
# | | + ———- dag van maand (1 - 31)
# | | | + ——- maand (1 - 12)
# | | | | + —- dag van die week (0 - 6) (Sondag = 0 of 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Bogenoemde sal my skrip elke minuut uitvoer. As ek net een keer per uur wou hardloop, sou ek net hoeveel minute na die uur wou hê dat dit moes hardloop, dus as dit op die punt van 30 minute was:

30 * * * * /var/www/html/myscript.php

Maak seker dat u ook die regte vir hierdie lêer as uitvoerbaar stel! Ek het gevind dat sintaksis, toestemmings en uitvoering van crontab vanaf die Terminal-venster die belangrikste faktore was. Elke keer as ek die lêer weer stoor, sal ek ook sien dat my toestemmings weer nodig is!

OPDATEER: As u wil verseker dat die werksgeleenthede aan die gang is, is een manier om 'n databasisveld by te werk met die laaste keer dat die script uitgevoer is. As dit meer gereeld is, kan u 'n e-pos stuur wat aan u gestuur word.

Bykomende Cron-bronne:

Hoeveel werksgeleenthede kan u gebruik om Cron te gebruik?

8 Comments

  1. 1

    Die beste artikel oor die instelling van 'n cron, vir iemand wat nuut is vir crojobs, is die moeilikste deel om 'n cron op te stel, om die cronjob-uitvoeringsinterval uit te vind, en dit is baie moeilik om met die eerste probeerslag 'n verkeerde interval te kry. As u cronjobs tydsensitief is, is dit goed om 'n paar kodes in die script op te neem om die status weer te gee sodat u op hoogte gehou word van die status van die taakuitvoering.

  2. 2

    Hallo Doug,

    'N Paar dinge wat u moet oorweeg wanneer u met cron-werk werk.

    Eerstens, na 'n paar dosyne, sou u wou hê dat u 'n gebruikersinterface, 'n databasis en sintaks gehad het wat Engels lyk 😉

    Tweedens, cron sal die werk op die gespesifiseerde tyd ontslaan, ongeag of die vorige aanroep van die werk voltooi is. As u dus een keer per minuut werk neem wat 2 minute duur, sal dit vinnig lei tot baie dieselfde werk.

    Vervolgens is daar byna geen foutrapportering as iets verkeerd loop nie, dus moet u u eie foutrapportering byvoeg.

    Ek het dit op 'n paar maniere aangespreek:
    - laat die toepassing via cron in 'n databasis laat draai om vas te stel wat uitgevoer moet word. Begin dit een keer per minuut of uur, afhangende van wat u wil hê
    - laat elke script 'n 'lock'-lêer in / tmp maak en as dit bestaan, moet u nie weer begin nie, dit voorkom duplikaatwerk as u dit nie wil hê nie
    - stuur 'n e-pos-waarskuwing as die slotlêer ouer as 1 uur is (of wat daarop dui dat u gesterf het)
    - laat die teks e-pos stuur na die mislukking van die werk, sodat u weet dat iets verkeerd geloop het
    - kyk na raamwerke soos Flux of kommersiële skedulers as u behoeftes groter is as 'n paar skrifte

    Chris

  3. 4

    Ek voeg ook by dat 'crontab -e' op die meeste Linux / Unix-stelsels gebruik word om u crontab te wysig. Ek dink u gasheer (Jumpline) gebruik 'n gewysigde weergawe om veiligheidsredes.

  4. 5

    Ek onthou nog die eerste dag toe ek Cronnie ontmoet het. Ek het dinge van haar gehoor dat sy betroubaar was, altyd betyds, maar soms 'n bietjie verwarrend oor haar bedoelings.

    Ek het gevind dat dit waar is, want sy was aanvanklik 'n volledige raaisel vir my. Nadat ek omtrent haar uitgevra het, het ek redelik vinnig vasgevang hoe sy graag wou opereer. Nou kan ek my nie voorstel dat 'n dag in haar lewe sonder haar sal verbygaan nie. Sy maak die alledaagse opwindend en lig baie laste van my skouers af.

    In alle erns voel ek dat ek net die oppervlak gekrap het met wat ek met cron-werk kan outomatiseer. Hulle is voorwaar 'n beste vriend van ontwikkelaars. As u iemand soos CPanel gebruik om u bediener te bestuur, bied dit 'n baie meer vriendelike koppelvlak om crons te skep. Voltooi die keuselyste vir minute, uur, dag, maand, ensovoorts wat die cron-lyn vir u opbou.

  5. 7

    Ek sien beslis dat dit iets is wat elke bemarker moet gebruik ... Is daar iemand wat hierdie diens kan lewer omdat dit 'n bietjie te "tegnies" klink?

Wat dink jy?

Hierdie webwerf gebruik Akismet om spam te verminder. Leer hoe jou opmerking verwerk is.