Websites kunnen geplande taken uitvoeren met Cron

klok

We hebben een aantal redundante monitoringsystemen in gebruik die regelmatig processen uitvoeren. Sommige rennen elke minuut, andere een keer per nacht, afhankelijk van wat ze doen. We kunnen bijvoorbeeld een script uitvoeren dat alle klanten die in 30 dagen geen aankoop hebben gedaan, exporteert om hen een coupon te sturen.

In plaats van te proberen deze allemaal met de hand bij te houden, is het veel gemakkelijker om taken te bouwen die automatisch worden gepland en uitgevoerd. Op Unix-gebaseerde systemen wordt dit bereikt met Cron. Voor jullie mensen die weten wat je doet, voel je vrij om mij en de lezers te informeren als ik enige desinformatie weggooi.

Het is jammer, maar de typische webontwikkelaar is helemaal niet bekend met Cron. Zelfs als dat zo is, bieden webhostingbedrijven vaak geen toegang tot of ondersteuning van Cron. Mijn host is een van de laatste - ze staan ​​je toe het te gebruiken, maar ze ondersteunen het niet.

Wat is Cron?

cron is genoemd naar het Griekse woord Chronos, wat betekent niet de tijd of. Cron wordt in een continue lus uitgevoerd om taken uit te voeren die zijn verzameld door Crontab (misschien genoemd naar tabulator. Deze taken worden doorgaans Cronjobs genoemd en kunnen verwijzen naar scripts op uw site.

Cron-diagram Uitleg

Hoe stel ik de Crontab

Cron echt laten rennen kan een uitdaging zijn, dus dit is wat ik heb geleerd en waarvoor ik het deed: Als Suck:

  1. Ik heb mijn script ingesteld om Twitter's te controleren API om te zien of iemand had gereageerd @ifsuck. Ik heb die berichten vergeleken met de berichten die ik al op de website had opgeslagen, waarbij ik nieuwe heb ingevoerd.
  2. Toen het script eenmaal werkte, heb ik machtigingen voor de gebruiker ingeschakeld om het script uit te voeren (744) en de scriptreferentie aan mijn Cronjob-bestand toegevoegd - daarover later meer.
  3. Ik moest toen via SSH inloggen op mijn website. Op een Mac kostte dat het openen van Terminal en typen SSH gebruikersnaam@domein.com waarbij gebruikersnaam de gebruikersnaam was die ik wilde gebruiken en domein de website was. Ik werd toen om het wachtwoord gevraagd en gaf het.
  4. Ik heb toen geprobeerd het script rechtstreeks vanaf de opdrachtprompt uit te voeren door de bestandsnaam en het relatieve pad op de server te typen: /var/www/html/mijnscript.php
  5. Toen ik het eenmaal goed had laten werken, heb ik de benodigde Unix-code toegevoegd aan de eerste regel van het bestand: #! / usr / bin / php -q . Ik geloof dat dit eenvoudigweg Unix vertelt om PHP te gebruiken om het script uit te voeren.
  6. Op de Terminal-opdrachtregel typte ik crontab (anderen moeten mogelijk typen crontab -e) en druk op enter ... en dat was alles wat nodig was!

Syntaxis voor uw Cronjob-bestand

Met betrekking tot #2 hierboven gebruikt Cron een ingenieus schema om te bepalen wanneer uw scripts worden uitgevoerd. Je kunt dit zelfs in je Cronfile kopiëren en plakken (op mijn host bevindt het zich in / var / spool / cron / met dezelfde bestandsnaam als mijn gebruikersnaam).

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

Het bovenstaande zal mijn script elke minuut uitvoeren. Als ik wilde dat het maar één keer per uur liep, zou ik gewoon aangeven hoeveel minuten na het uur dat ik wil dat het wordt uitgevoerd, dus als het op het merkteken van 30 minuten was:

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

Zorg ervoor dat u de machtigingen voor dit bestand ook als uitvoerbaar instelt! Ik ontdekte dat syntaxis, machtigingen en het uitvoeren van crontab vanuit het Terminal-venster de belangrijkste factoren waren. Elke keer dat ik het bestand opnieuw opsloeg, merkte ik dat mijn machtigingen ook opnieuw moesten worden ingesteld!

UPDATE: Als u er zeker van wilt zijn dat de taken worden uitgevoerd, is een eenvoudige manier om een ​​databaseveld bij te werken met de laatste keer dat het script werd uitgevoerd. Als het minder vaak voorkomt, kunt u gewoon een e-mail schrijven die naar uzelf is verzonden.

Aanvullende cron-bronnen:

Hoeveel taken zou u kunnen automatiseren met Cron?

8 reacties

  1. 1

    Goed behandeld artikel over het opzetten van een cron, voor iemand die nieuw is bij crojobs, is het moeilijkste deel bij het opzetten van een cron het bepalen van het cronjob-uitvoeringsinterval, en het is vrij normaal om bij de eerste poging een verkeerd interval te krijgen. Als uw cronjobs tijdgevoelig zijn, is het goed om enkele codes in het script op te nemen om de status weer te geven, zodat u op de hoogte blijft van de status van de taakuitvoering.

  2. 2

    Hallo Doug,

    Een paar dingen waarmee u rekening moet houden bij het werken met cron-taken.

    Ten eerste zou je na een paar dozijn wensen dat je een gebruikersinterface, een database en een Engelstalige syntaxis had 😉

    Ten tweede zal cron de taak op het opgegeven tijdstip activeren, ongeacht of de vorige aanroep van de taak is voltooid. Dus één keer per minuut een taak uitvoeren die 2 minuten duurt, zal snel leiden tot veel van dezelfde taak die wordt uitgevoerd.

    Vervolgens is er vrijwel geen foutrapportage wanneer er iets misgaat, dus u moet uw eigen foutrapportage toevoegen.

    Ik heb deze op een aantal manieren aangepakt:
    - laat de applicatie activeren via cron in een database kijken om te bepalen wat er moet worden uitgevoerd. Voer het een keer per minuut of uur uit, afhankelijk van wat u wilt
    - laat elk script een 'lock'-bestand maken in / tmp en als het bestaat, begin dan niet opnieuw, dit voorkomt dubbele taken als je ze niet wilt
    - als het script vindt dat het vergrendelingsbestand ouder is dan 1 uur (of wat dan ook suggereert dat u stierf), stuur dan een e-mailwaarschuwing
    - laat het script een e-mail sturen als de taak mislukt, zodat u weet dat er iets mis is gegaan
    - kijk naar frameworks zoals Flux of commerciële schedulers als uw behoeften verder gaan dan een paar scripts

    Chris

  3. 4

    Ik zal ook toevoegen dat op de meeste Linux / Unix-systemen, "crontab -e" is wat je gebruikt om je crontab te bewerken. Ik denk dat je host (Jumpline) om veiligheidsredenen een aangepaste versie gebruikt.

  4. 5

    Ik herinner me nog de eerste dag dat ik Cronnie ontmoette. Ik had dingen over haar gehoord, dat ze betrouwbaar was, altijd op tijd, maar soms een beetje verwarrend over haar bedoelingen.

    Ik ontdekte dat dit waar was, omdat ze aanvankelijk een compleet mysterie voor me was. Nadat ik naar haar had gevraagd, begreep ik vrij snel hoe ze graag opereerde. Nu kan ik me geen dag voorstellen zonder haar in mijn leven. Ze maakt het alledaagse spannend en neemt veel lasten van mijn schouders.

    In alle ernst, ik heb het gevoel dat ik alleen maar aan de oppervlakte heb gekrast met wat ik kan automatiseren met cron-taken. Ze zijn echt de beste vriend van een ontwikkelaar. Als u iemand als CPanel gebruikt om uw server te beheren, biedt dit een veel vriendelijkere interface om crons te maken. Compleet met vervolgkeuzemenu's voor minuut, uur, dag, maand, etc. die de cron-lijn voor u samenstellen.

  5. 7

    Ik begrijp zeker dat dit iets is dat elke marketeer zou moeten gebruiken ... Is er iemand die deze service kan bieden omdat het een beetje te "technisch" klinkt?

Wat denk je?

Deze site gebruikt Akismet om spam te verminderen. Ontdek hoe uw reactiegegevens worden verwerkt.