Websteder kan køre planlagte opgaver med Cron

ur

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

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

Det er uheldigt, men den typiske webudvikler er slet ikke bekendt med Cron. Selvom det er tilfældet, leverer webhostingfirmaer ofte ikke adgang til eller support til Cron. Min vært er en af ​​sidstnævnte - de tillader dig at bruge det, men de stø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 at køre rent faktisk kan være udfordrende, så her er hvad jeg lærte, og hvordan jeg gjorde det for Hvis sutter:

  1. Jeg oprettede 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 nr. 2 ovenfor bruger Cron et genialt skema til at bestemme, hvornår dine scripts skal udføres. Faktisk kan du faktisk kopiere og indsætte dette i din Cronfile (på min vært er den 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 også for at indstille tilladelserne til denne fil som eksekverbar! Jeg fandt ud af, at syntaks, tilladelser og udførelse af crontab fra terminalvinduet var de vigtigste faktorer. Hver gang jeg skulle gemme filen igen, ville jeg også finde mine tilladelser, der skulle nulstilles!

UPDATE: 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 script 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.