Websteder kan køre planlagte opgaver med Cron

ur

Vi har en række redundante overvågningssystemer på arbejde, der regelmæssigt udfører processer. Nogle kører hvert minut, nogle en gang om natten afhængigt af hvad de laver. For eksempel kan vi eksekvere et script, der eksporterer alle kunder, der ikke har foretaget et køb i 30 dage for at sende dem en kupon.

I stedet for at forsøge at holde styr på alle disse i hånden, er det meget lettere at bygge job, der automatisk planlægges og udføres. På Unix-baserede systemer opnås dette med Cron. For jer, der ved, hvad I laver, er I velkommen til at uddanne mig og læserne, hvis jeg smider desinformation ud.

Det er ærgerligt, men den typiske webudvikler kender slet ikke Cron. Selvom de er det, leverer webhostingfirmaer ofte ikke adgang til eller support af Cron. Min vært er en af ​​sidstnævnte - de giver dig mulighed for at bruge det, men de understøtter det ikke.

Hvad er Cron?

Cron er opkaldt efter det græske ord Chronos, der betyder tid. Cron kører i en kontinuerlig løkke for at køre opgaver, der akkumuleres af Crontab (måske opkaldt efter fanenulator. Disse opgaver kaldes typisk Cronjobs og kan henvise til scripts på dit websted.

Cron Diagram Forklaring

Hvordan opsætter jeg Crontab

At få Cron til faktisk at løbe kan være udfordrende, så her er hvad jeg lærte, og hvordan jeg gjorde det for Hvis sutter:

  1. Jeg konfigurerede mit script til at kontrollere Twitter API for at se om nogen havde svaret @ifsuck. Jeg sammenlignede disse meddelelser med de meddelelser, jeg allerede har gemt på hjemmesiden, og indtastet nye.
  2. Når scriptet fungerede, aktiverede jeg tilladelser for brugeren til at udføre scriptet (744) og tilføjede scriptreferencen til min Cronjob-fil - mere om det senere.
  3. Derefter måtte jeg logge ind på min hjemmeside via SSH. På en Mac tog det at åbne Terminal og skrive SSH brugernavn@domæne.com hvor brugernavn var det brugernavn, jeg ønskede at bruge, og domæne var webstedet. Jeg blev derefter bedt om at give adgangskoden.
  4. Jeg forsøgte derefter at køre scriptet direkte fra kommandoprompten ved at skrive filnavnet og den relative sti på serveren: /var/www/html/myscript.php
  5. Når jeg fik det til at fungere korrekt, tilføjede jeg den nødvendige Unix-kode i første linje i filen: #! / usr / bin / php -q . Jeg tror, ​​dette siger simpelthen til Unix at bruge PHP til at udføre scriptet.
  6. På kommandolinjen Terminal skrev jeg crontab (andre skal muligvis skrive crontab -e) og tryk enter ... og det var alt, hvad der var nødvendigt!

Syntaks til din Cronjob-fil

Med hensyn til #2 ovenfor anvender Cron et genialt skema til at bestemme, hvornår dine scripts skal eksekveres. Faktisk kan du faktisk kopiere og indsætte dette i din Cronfile (på min vært er det placeret i / var / spole / cron / med filnavnet det samme som mit brugernavn).

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

Ovenstående udfører mit script hvert minut. Hvis jeg kun ville have det til at køre en gang i timen, ville jeg bare lægge, hvor mange minutter efter den time, jeg ville ønske, at det skulle køre, så hvis det var ved 30-minutters-mærket:

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

Sørg for, at du også angiver tilladelserne til denne fil som eksekverbare! Jeg fandt ud af, at syntaks, tilladelser og udførelse af crontab fra terminalvinduet var de vigtigste faktorer. Hver gang jeg gemte filen igen, fandt jeg også, at mine tilladelser også skulle nulstilles!

OPDATERING: Hvis du gerne vil sikre, at jobene kører, er en simpel måde at opdatere et databasefelt med sidste gang, scriptet blev kørt. Hvis det er mere sjældent, kan du bare scripte en e -mail sendt til dig selv.

Yderligere Cron-ressourcer:

Hvor mange job kunne du automatisere ved hjælp af Cron?

8 Kommentarer

  1. 1

    Godt dækket artikel om opsætning af en cron, for en person, der er ny til crojobs, er den sværeste del ved at oprette en cron at finde ud af cronjobs eksekveringsinterval, og det er ret almindeligt at få et forkert interval ved første forsøg. Hvis dine cronjobs er tidsfølsomme, er det godt at medtage nogle koder i scriptet for at ekko ud status, så du holdes underrettet om status for jobudførelse.

  2. 2

    Hej Doug,

    Et par ting at overveje, når du arbejder med cron-job.

    Først efter et par dusin vil du ønske, at du havde et brugergrænseflade, en database og en syntaks med engelsk udseende 😉

    For det andet vil cron afskedige jobbet på det angivne tidspunkt, uanset om den tidligere påkaldelse af jobbet er afsluttet. Så at køre et job en gang i minuttet, der tager 2 minutter, vil hurtigt føre til, at mange af det samme job kører.

    Dernæst er der næsten ingen fejlrapportering, når noget går galt, så du bliver nødt til at tilføje din egen fejlrapportering.

    Jeg har behandlet disse på et par måder:
    - få applikationen udløst via cron-look i en database for at bestemme, hvad der skal køres. Kør det en gang i minuttet eller en time afhængigt af hvad du vil have
    - få hvert script til at oprette en "lås" -fil i / tmp, og hvis den findes, skal du ikke starte igen, dette forhindrer duplikerede job, hvis du ikke vil have dem
    - hvis scriptet finder låsefilen ældre end 1 time (eller hvad der antyder, at du er død), skal du sende en e-mail-alarm
    - få scriptet til at sende e-mail, når jobbet mislykkes, så du ved, at noget gik galt
    - se på rammer som Flux eller kommercielle planlæggere, når dine behov kommer ud over et par scripts

    Chris

  3. 4

    Jeg tilføjer også, at "crontab -e" på de fleste Linux / Unix-systemer er det, du bruger til at redigere din crontab. Jeg tror, ​​at din vært (Jumpline) bruger en ændret version af sikkerhedsmæssige årsager.

  4. 5

    Jeg kan stadig huske den første dag, jeg mødte Cronnie. Jeg havde hørt ting om hende, at hun var pålidelig, altid til tiden, men nogle gange lidt forvirrende over sine intentioner.

    Jeg fandt dette at være sandt, da hun først var et komplet mysterium for mig. Efter at have spurgt rundt om hende, fangede jeg temmelig hurtigt, hvordan hun kunne lide at operere. Nu kan jeg ikke forestille mig, at en dag går uden hende i mit liv. Hun gør det verdslige spændende og løfter mange byrder over mine skuldre.

    I al alvor ser jeg ud til, at jeg kun har ridset overfladen med det, jeg kan automatisere med cron-job. De er virkelig udviklerens bedste ven. Hvis du bruger en person som CPanel til at administrere din server, giver den en meget mere venlig grænseflade til at oprette crons. Komplet med rullemenuer i minut, time, dag, måned osv., Der bygger cron-linjen for dig.

  5. 7

    Jeg kan bestemt se, at dette er noget, som enhver marketingmedarbejder skal bruge ... Er der nogen, der kan levere denne service, fordi den lyder lidt for "teknisk"?

Hvad mener du?

Dette websted bruger Akismet til at reducere spam. Lær, hvordan dine kommentardata behandles.