Webbplatser kan köra schemalagda uppgifter med Cron

klocka

Vi har ett antal överflödiga övervakningssystem på jobbet som regelbundet utför processer. Vissa springer varje minut, andra en gång om natten beroende på vad de gör. Vi kan till exempel utföra ett skript som exporterar alla kunder som inte har gjort ett köp på 30 dagar för att skicka en kupong till dem.

I stället för att försöka hålla reda på alla dessa för hand är det mycket lättare att bygga jobb som automatiskt planeras och utförs. På Unix-baserade system uppnås detta med Cron. För er folk som vet vad ni gör, gärna utbilda mig och läsarna om jag slänger ut någon desinformation.

Det är olyckligt, men den typiska webbutvecklaren känner inte alls till Cron. Även om det är så tillhandahåller webbhotell ofta inte tillgång till eller stöd för Cron. Min värd är en av de senare - de tillåter dig att använda den, men de stöder inte den.

Vad är Cron?

Cron heter efter det grekiska ordet Chronos, vilket betyder tid. Cron körs i en kontinuerlig slinga för att köra uppgifter som ackumuleras av Crontab (kanske namngiven efter flikenulator. Dessa uppgifter kallas vanligtvis Cronjobs och kan referera till skript på din webbplats.

Cron Diagram Förklaring

Hur ställer jag in Crontab

Att få Cron att springa faktiskt kan vara utmanande, så här är vad jag lärde mig och hur jag gjorde det för Om suger:

  1. Jag ställde in mitt skript för att kontrollera Twitter API för att se om någon hade svarat @ifsuck. Jag jämförde dessa meddelanden med de meddelanden som jag redan sparade på webbplatsen och skrev in nya.
  2. När skriptet fungerade aktiverade jag behörigheter för användaren att köra skriptet (744) och lade till skriptreferensen i min Cronjob-fil - mer om det senare.
  3. Jag fick sedan logga in på min webbplats via SSH. På en Mac tog det att öppna Terminal och skriva SSH-användarnamn@domän.com där användarnamnet var det användarnamn jag ville använda och domänen var webbplatsen. Jag uppmanades sedan och gav lösenordet.
  4. Jag försökte sedan köra skriptet direkt från kommandotolken genom att skriva filnamn och relativ sökväg på servern: /var/www/html/myscript.php
  5. När jag väl fick det att fungera korrekt lade jag till den nödvändiga Unix-koden i den första raden i filen: #! / usr / bin / php -q . Jag tror att detta helt enkelt säger till Unix att använda PHP för att utföra skriptet.
  6. På kommandoraden Terminal skrev jag crontab (andra kan behöva skriva crontab -e) och tryck enter ... och det var allt som behövdes!

Syntax för din Cronjob-fil

När det gäller # 2 ovan använder Cron ett genialt schema för att bestämma när dina skript ska köras. Faktum är att du faktiskt kan kopiera och klistra in det i din Cronfile (på min värd ligger den i / var / spole / cron / med filnamnet samma som mitt användarnamn).

# + —————- minut (0 - 59)
# | + ————- timme (0 - 23)
# | | + ———- månadsdag (1 - 31)
# | | | + ——- månad (1 - 12)
# | | | | + —- veckodag (0 - 6) (söndag = 0 eller 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Ovanstående kör mitt skript varje minut. Om jag bara ville att den skulle springa en gång i timmen, skulle jag bara lägga in hur många minuter efter timmen som jag önskar att den skulle springa, så om den var vid 30-minutersmärket:

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

Se till att du ställer in behörigheterna för den här filen också som körbar! Jag fann att syntax, behörigheter och körning av crontab från terminalfönstret var de viktigaste faktorerna. Varje gång jag skulle spara filen igen skulle jag också hitta mina behörigheter som behöver återställas!

UPPDATERING: Om du vill se till att jobben körs är ett enkelt sätt att uppdatera ett databasfält med senaste gången manuset kördes. Om det är mer sällsynt kan du bara skriva ett e-postmeddelande som skickas till dig själv.

Ytterligare Cron-resurser:

Hur många jobb kan du automatisera med Cron?

8 Kommentarer

  1. 1

    Väl täckt artikel om att ställa in en cron, för någon ny på crojobs, är den svåraste delen att ställa in en cron att räkna ut cronjobs exekveringsintervall, och det är ganska vanligt att få fel intervall vid första försöket. Om dina cronjobs är tidskänsliga är det bra att inkludera några koder i skriptet för att eka ut status så att du hålls informerad om statusen för utförande av jobb.

  2. 2

    Hej Doug,

    Ett par saker att tänka på när du arbetar med cron-jobb.

    Först, efter några dussin, önskar du att du hade ett användargränssnitt, en databas och syntax som ser engelsk ut 😉

    För det andra kommer cron att avfyra jobbet vid den angivna tiden, oavsett om den tidigare anropet av jobbet slutförts. Så att köra ett jobb en gång i minuten som tar 2 minuter leder snabbt till att mycket av samma jobb körs.

    Därefter finns det nästan ingen felrapportering när något går fel, så du måste lägga till din egen felrapportering.

    Jag har tagit upp dessa på ett par sätt:
    - har applikationen utlöst via cron look i en databas för att avgöra vad som behöver köras. Kör den en gång per minut eller timme beroende på vad du vill ha
    - låt varje skript skapa en "lås" -fil i / tmp och om den finns, börja inte igen, detta förhindrar dubbla jobb om du inte vill ha dem
    - om skriptet hittar låsfilen som är äldre än 1 timme (eller vad som tyder på att du dog) skicka en e-postavisering
    - låt manuset skicka e-post vid misslyckande med jobbet så att du vet att något gick fel
    - titta på ramar som Flux eller kommersiella schemaläggare när dina behov går längre än några skript

    chris

  3. 4

    Jag lägger också till att på de flesta Linux / Unix-system är "crontab -e" det du använder för att redigera din crontab. Jag tror att din värd (Jumpline) använder en modifierad version av säkerhetsskäl.

  4. 5

    Jag minns fortfarande den första dagen jag träffade Cronnie. Jag hade hört saker om henne, att hon var pålitlig, alltid i tid, men ibland lite förvirrande om sina avsikter.

    Jag tyckte att detta var sant eftersom hon först var ett mysterium för mig. Efter att ha frågat om henne fick jag ganska snabbt reda på hur hon gillade att fungera. Nu kan jag inte föreställa mig en dag som går utan henne i mitt liv. Hon gör det vardagliga spännande och lyfter många bördor från mina axlar.

    På allvar ser jag ut som att jag bara har skrapat på ytan med det jag kan automatisera med cron-jobb. De är verkligen en bästa vän för utvecklare. Om du använder någon som CPanel för att hantera din server, ger det ett mycket mer vänligt gränssnitt för att skapa crons. Komplett med rullgardinsmenyer för minut, timme, dag, månad etc. som bygger cron-linjen åt dig.

  5. 7

    Jag ser definitivt att detta är något som varje marknadsförare ska använda ... Finns det någon som kan tillhandahålla den här tjänsten eftersom den låter lite för "tekniskt"?

Vad tror du?

Den här sidan använder Akismet för att minska spam. Läs om hur din kommentardata behandlas.