Nettsteder kan kjøre planlagte oppgaver med Cron

klokke

Vi har en rekke overflødige overvåkingssystemer på jobb som regelmessig utfører prosesser. Noen løper hvert minutt, andre en gang om natten, avhengig av hva de gjør. For eksempel kan vi utføre et skript som eksporterer alle kunder som ikke har gjort et kjøp på 30 dager for å sende dem en kupong.

I stedet for å prøve å holde rede på alle disse for hånd, er det mye lettere å bygge jobber som automatisk planlegges og utføres. På Unix-baserte systemer oppnås dette med Cron. For dere som vet hva dere gjør, kan dere informere meg og leserne om jeg kaster ut noe desinformasjon.

Det er uheldig, men den typiske nettutvikleren er ikke kjent med Cron i det hele tatt. Selv om de er det, gir webhotell ofte ikke tilgang til eller støtte til Cron. Verten min er en av de siste - de lar deg bruke den, men de støtter den ikke.

Hva er Cron?

Cron er oppkalt etter det greske ordet Chronos, som betyr tid. Cron kjører i en kontinuerlig løkke for å kjøre oppgaver som akkumuleres av Crontab (kanskje oppkalt etter tabulator. Disse oppgavene blir ofte referert til som Cronjobs, og kan referere til skript på nettstedet ditt.

Cron Diagram Forklaring

Hvordan konfigurerer jeg Crontab

Det kan være utfordrende å få Cron til å løpe, så her er hva jeg lærte og hvordan jeg gjorde det for Hvis suger:

  1. Jeg satte opp skriptet mitt for å sjekke Twitter API for å se om noen hadde svart på @ifsuck. Jeg sammenlignet disse meldingene med meldingene jeg allerede lagret på nettstedet, og skrev inn nye.
  2. Når skriptet fungerte, aktiverte jeg tillatelser for brukeren å utføre skriptet (744) og la til skriptreferansen i Cronjob-filen min - mer om det senere.
  3. Jeg måtte da logge inn på nettstedet mitt via SSH. På en Mac tok det å åpne Terminal og skrive SSH brukernavn@domene.com der brukernavnet var brukernavnet jeg ønsket å bruke og domenet var nettstedet. Jeg ble deretter bedt om å oppgi passordet.
  4. Jeg prøvde deretter å kjøre skriptet direkte fra ledeteksten ved å skrive inn filnavnet og den relative banen på serveren: /var/www/html/myscript.php
  5. Når jeg fikk det til å fungere riktig, la jeg til den nødvendige Unix-koden i første linje i filen: #! / usr / bin / php -q . Jeg tror dette bare forteller Unix å bruke PHP til å utføre skriptet.
  6. På Terminal-kommandolinjen skrev jeg crontab (andre må kanskje skrive crontab -e) og trykk enter ... og det var alt som trengtes!

Syntaks for Cronjob-filen

Når det gjelder nr. 2 ovenfor, bruker Cron en genial plan for å bestemme når manusene dine skal kjøres. Faktisk kan du faktisk kopiere og lime dette inn i Cronfile (på verten min, den ligger i / var / spole / cron / med filnavnet det samme som brukernavnet mitt).

# + —————- minutt (0 - 59)
# | + ————- time (0 - 23)
# | | + ———- dag i måneden (1 - 31)
# | | | + ——- måned (1 - 12)
# | | | | + —- ukedag (0 - 6) (søndag = 0 eller 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Ovennevnte vil utføre skriptet mitt hvert minutt. Hvis jeg bare ville at den skulle løpe en gang i timen, ville jeg bare lagt inn hvor mange minutter etter timen jeg skulle ønske at den skulle løpe, så hvis den var i løpet av 30 minutter:

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

Pass på at du også har angitt tillatelsene til denne filen som kjørbar! Jeg fant ut at syntaks, tillatelser og utføring av crontab fra terminalvinduet var de viktigste faktorene. Hver gang jeg lagrer filen på nytt, vil jeg også finne at tillatelsene mine trenger å tilbakestilles!

OPPDATERING: Hvis du vil sikre at jobbene kjører, er en enkel måte å oppdatere et databasefelt med sist gang skriptet ble kjørt. Hvis det er mer sjeldent, kan du bare skripte en e-post sendt til deg selv.

Ytterligere Cron-ressurser:

Hvor mange jobber kan du automatisere ved å bruke Cron?

8 Kommentarer

  1. 1

    Godt dekket artikkel om å sette opp en cron, for noen som er nye for crojobs, er den vanskeligste delen med å sette opp en cron å finne ut cronjobs utførelsesintervall, og det er ganske vanlig å få feil intervall ved første forsøk. Hvis cronjobs er tidssensitive, er det bra å inkludere noen koder i skriptet for å ekko ut status slik at du blir informert om status for jobbutførelse.

  2. 2

    Hei Doug,

    Et par ting du bør vurdere når du jobber med cron-jobber.

    Først, etter noen titalls, vil du ønske at du hadde et brukergrensesnitt, en database og syntaks som ser engelsk ut

    For det andre vil cron si opp jobben til det angitte tidspunktet, uavhengig av om forrige påkalling av jobben er fullført. Så å kjøre en jobb en gang i minuttet som tar 2 minutter, vil raskt føre til at mye av den samme jobben kjører.

    Deretter er det nesten ingen feilrapportering når noe går galt, så du må legge til din egen feilrapportering.

    Jeg har adressert disse på et par måter:
    - har applikasjonen utløst via cron look i en database for å avgjøre hva som må kjøres. Kjør den en gang i minuttet eller timen, avhengig av hva du vil
    - la hvert skript lage en "lås" -fil i / tmp, og hvis den eksisterer, ikke start på nytt, dette forhindrer dupliserte jobber hvis du ikke vil ha dem
    - hvis skriptet finner låsefilen eldre enn 1 time (eller hva som antyder at du døde), send en e-postvarsling
    - La skriptet sende e-post når jobben mislyktes, slik at du vet at noe gikk galt
    - se på rammer som Flux eller kommersielle planleggere når dine behov kommer utover noen få skript

    chris

  3. 4

    Jeg vil også legge til at på de fleste Linux / Unix-systemer er "crontab -e" det du bruker for å redigere crontab. Jeg tror verten din (Jumpline) bruker en modifisert versjon av sikkerhetsgrunner.

  4. 5

    Jeg husker fortsatt den første dagen jeg traff Cronnie. Jeg hadde hørt ting om henne, at hun var pålitelig, alltid i tide, men noen ganger litt forvirrende om intensjonene.

    Jeg fant dette å være sant, ettersom hun først var et fullstendig mysterium for meg. Etter å ha spurt om henne, fikk jeg ganske raskt med meg hvordan hun likte å operere. Nå kan jeg ikke forestille meg at en dag vil gå uten henne i mitt liv. Hun gjør det verdslige spennende, og løfter mange byrder av skuldrene mine.

    I full alvor ser jeg ut til at jeg bare har skrapet overflaten med det jeg kan automatisere med cron-jobber. De er virkelig en bestevenn for utviklere. Hvis du bruker noen som CPanel til å administrere serveren din, gir den et mye mer vennlig grensesnitt for å lage crons. Komplett med rullegardinmenyer for minutt, time, dag, måned osv. Som bygger cron-linjen for deg.

  5. 7

    Jeg ser absolutt at dette er noe hver markedsfører bør bruke ... Er det noen som kan tilby denne tjenesten fordi den høres litt for "teknisk ut"?

Hva tror du?

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.