Spletna mesta lahko izvajajo načrtovana opravila s programom Cron

ura

V službi imamo številne odvečne nadzorne sisteme, ki redno izvajajo procese. Nekateri tečejo vsako minuto, nekateri enkrat na noč, odvisno od tega, kaj počnejo. Na primer, lahko izvedemo skript, ki izvozi vse stranke, ki v 30 dneh niso opravile nakupa, da jim pošlje kupon.

Namesto da bi vse to poskušali spremljati ročno, je veliko lažje ustvariti opravila, ki se samodejno razporejajo in izvajajo. V sistemih, ki temeljijo na Unixu, je to doseženo s Cronom. Ljudje, ki veste, kaj počnete, vas prosimo, da izobražite mene in bralce, če zavrnem kakršno koli dezinformacijo.

Žal je, toda tipični spletni razvijalec s Cronom sploh ni seznanjen. Tudi če so, podjetja za spletno gostovanje pogosto ne nudijo dostopa do Crona ali ga ne podpirajo. Moj gostitelj je eden izmed slednjih - dovolijo vam uporabo, vendar je ne podpirajo.

Kaj je Cron?

Cron je poimenovan po grški besedi Chronos, kar pomeni čas. Cron teče v neprekinjeni zanki za izvajanje nalog, ki jih nabere Crontab (morda poimenovano za tabulator. Te naloge se običajno imenujejo Cronjobs in se lahko sklicujejo na skripte na vašem spletnem mestu.

Pojasnilo kronskega diagrama

Kako nastavim Crontab

Pridobiti Crona, da dejansko teče, je lahko zahtevno, zato sem se naučil in kako sem to naredil Če je zanič:

  1. Nastavil sem svoj skript za preverjanje Twitterjev API da vidim, če je kdo odgovoril @ifsuck. Ta sporočila sem primerjal s sporočili, ki sem jih že shranil na spletnem mestu in vnesel vsa nova.
  2. Ko je skript deloval, sem omogočil uporabniku dovoljenja za izvajanje skripta (744) in dodal sklic na skript v mojo datoteko Cronjob - več o tem kasneje.
  3. Nato sem se moral prijaviti na svoje spletno mesto prek SSH. Na Macu je bilo treba odpreti Terminal in tipkati SSH uporabniško ime@domena.com kjer je bilo uporabniško ime uporabniško ime, ki sem ga želel uporabiti, domena pa je bila spletno mesto. Nato so me pozvali in dali geslo.
  4. Nato sem poskusil zagnati skript neposredno iz ukaznega poziva, tako da sem v strežnik vpisal ime datoteke in relativno pot: /var/www/html/myscript.php
  5. Ko sem pravilno deloval, sem v prvo vrstico datoteke dodal potrebno kodo Unix: #! / usr / bin / php -q . Verjamem, da Unixu to preprosto pove, naj uporabi PHP za izvajanje skripta.
  6. V ukazno vrstico terminala sem tipkal crontab (drugi bodo morda morali tipkati crontab -e) in pritisnite Enter ... in to je bilo vse, kar je bilo potrebno!

Sintaksa za datoteko Cronjob

Glede št. 2 zgoraj Cron uporablja iznajdljivo shemo za določanje, kdaj bodo izvedeni vaši skripti. Pravzaprav lahko to dejansko kopirate in prilepite v svoj Cronfile (na mojem gostitelju se nahaja v / var / spool / cron / z imenom datoteke enako kot moje uporabniško ime).

# + —————- minuta (0 - 59)
# | + ————- ura (0 - 23)
# | | + ———- dan v mesecu (1 - 31)
# | | | + ——- mesec (1 - 12)
# | | | | + —- dan v tednu (0 - 6) (nedelja = 0 ali 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Zgoraj bo moj skript izveden vsako minuto. Če bi želel, da teče samo enkrat na uro, bi samo zapisal, koliko minut po uri, kolikor bi želel, da teče, torej če bi bil na oznaki 30 minut:

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

Prepričajte se, da ste tudi za to datoteko nastavili dovoljenja kot izvršljiva! Ugotovil sem, da so bili najpomembnejši sintaksa, dovoljenja in izvajanje crontaba iz okna Terminal. Vsakič, ko sem datoteko znova shranil, sem ugotovil, da je treba tudi moja dovoljenja ponastaviti!

UPDATE: Če želite zagotoviti, da se opravila izvajajo, je enostaven način posodobitev polja baze podatkov z zadnjim zagonom skripta. Če je bolj redko, lahko preprosto skriptirate e-poštno sporočilo, poslano sebi.

Dodatni viri Cron:

Koliko delovnih mest bi lahko avtomatizirali z uporabo Crona?

8 Komentarji

  1. 1

    Dobro zajet članek o nastavitvi crona, za nekoga, ki je nov v krojobih, je najtežji del pri postavljanju crona ugotoviti interval izvajanja cronjoba in ob prvem poskusu je zelo pogosto dobiti napačen interval. Če so vaši cronjobi časovno občutljivi, je v skript dobro vključiti nekaj kod za odmev stanja, tako da boste redno obveščeni o stanju izvajanja opravila.

  2. 2

    Živjo Doug,

    Nekaj ​​stvari, ki jih je treba upoštevati pri delu s cron opravili.

    Najprej si boste po nekaj ducatih zaželeli, da bi imeli uporabniški vmesnik, bazo podatkov in sintakso angleškega videza 😉

    Drugič, cron bo opravilo sprožil ob določenem času, ne glede na to, ali je bilo predhodno klicanje opravila končano. Torej, če opravite opravilo enkrat na minuto, ki traja 2 minuti, boste hitro privedli do več istih opravil.

    Nato ob napaki skoraj ni poročanja o napakah, zato boste morali dodati lastno poročanje o napakah.

    Te sem obravnaval na nekaj načinov:
    - naj se aplikacija sproži prek cron-a v bazi podatkov, da se določi, kaj je treba zagnati. Zaženite jo enkrat na minuto ali uro, odvisno od tega, kaj želite
    - naj vsak skript ustvari datoteko 'lock' v / tmp in če obstaja, ne začenjajte znova, to preprečuje podvojena opravila, če jih ne želite
    - če skript najde datoteko zaklepanja, starejšo od ene ure (ali karkoli že nakazuje, da ste umrli), pošljite e-poštno opozorilo
    - naj skript pošlje e-pošto ob neuspehu, tako da boste vedeli, da je šlo kaj narobe
    - poglejte okvire, kot so Flux ali komercialni načrtovalci, ko vaše potrebe presežejo nekaj skriptov

    chris

  3. 4

    Dodal bom tudi, da v večini sistemov Linux / Unix "crontab -e" uporabljate za urejanje crontaba. Mislim, da vaš gostitelj (Jumpline) iz varnostnih razlogov uporablja spremenjeno različico.

  4. 5

    Še vedno se spominjam prvega dne, ko sem spoznal Cronnie. Slišal sem stvari o njej, da je bila zanesljiva, vedno pravočasno, včasih pa nekoliko zmedena glede svojih namenov.

    Ugotovil sem, da je to res, saj mi je bila sprva popolna skrivnost. Po povpraševanju po njej sem dokaj hitro ugotovil, kako rada deluje. Zdaj si ne predstavljam dneva, ki bi minil brez nje v življenju. Naredi vsakdanje razburljivo in mi dvigne veliko bremen z ramen.

    Resnično se mi zdi, da sem po površini opraskal le tisto, kar lahko avtomatiziram s cron opravili. Resnično so najboljši prijatelj razvijalcev. Če za upravljanje strežnika uporabljate nekoga, kot je CPanel, ponuja veliko bolj prijazen vmesnik za ustvarjanje kronov. Skupaj s spustnimi meniji za minute, ure, dneve, mesece itd., Ki gradijo cron line za vas.

  5. 7

    Vsekakor vidim, da bi to moral uporabljati vsak prodajalec ... Ali lahko kdo ponudi to storitev, ker se sliši preveč "tehnično"?

Kaj menite?

Ta stran uporablja Akismet za zmanjšanje nezaželene pošte. Preberite, kako se vaš komentar obravnava.