Uppgiftsschemaläggning i Laravel

I den här artikeln kommer vi att gå igenom en av de spännande funktionerna i Laravel Web Framework-Uppgift Schemaläggning. Under hela denna artikel kommer vi att titta på hur Laravel tillåter dig att hantera planerade uppgifter i din ansökan. Dessutom kommer vi också att skapa egna skräddarsydda uppgifter för demonstrationsändamål.

Laravel-ramen tillåter dig att konfigurera schemalagda uppgifter så att du inte behöver oroa dig för att ställa in dem på systemnivå. Du kan bli av med den komplexa cron-syntaxen när du ställer in schemalagda uppgifter eftersom Laravel låter dig definiera dem på ett användarvänligt sätt.

Vi startar artikeln med hur du används för att konfigurera traditionella cron-jobb, och efter det kommer vi att undersöka Laravel-sättet att uppnå det. I den senare halvan av artikeln kommer vi prova genom att skapa några anpassade schemalagda uppgifter som borde ge praktisk inblick i ämnet.

Konfiguration av traditionell schemalagd uppgift

I din dagliga applikationsutveckling möter du ofta en situation som kräver att du utför regelbundna skript eller kommandon. Om du arbetar med * nix-systemet är du säkert medveten om att cron-jobb hanterar dessa kommandon. Å andra sidan är de kända som schemalagda uppgifter på Windows-baserade system.

Låt oss snabbt titta på ett enkelt exempel på det * nix-baserade cron-jobbet.

* / 5 * * * * /web/statistik.sh

Ganska enkelt - det körs statistics.sh filen var femte minut!

Även om det var ett ganska enkelt användarfall, befinner du dig ofta i en situation som kräver att du genomför mer komplicerade användarfall. Å andra sidan kräver ett komplext system att du definierar flera cron-jobb som körs vid olika tidsintervaller.

Låt oss se några uppgifter som en komplicerad webbapplikation måste utföra regelbundet i backend.

  • Rengör de onödiga data från databasens back-end.
  • Uppdatera kakningsindex för framsidan för att hålla den uppdaterad.
  • Beräkna webbplatsstatistiken.
  • Skicka e-mail.
  • Säkerhetskopiera olika sidelement.
  • Generera rapporter.
  • Och mer.

Så som du kan se finns det många saker där ute som väntar på att köras regelbundet och även vid olika tidsintervaller. Om du är en erfaren systemadministratör är det en tårta för dig att definiera cronjobben för alla dessa uppgifter, men ibland vill vi som utvecklare önska att det var enklare att komma runt.

Lyckligtvis kommer Laravel med en inbyggd Uppgiftsschemaläggning API som låter dig definiera schemalagda uppgifter som aldrig tidigare. Och ja, nästa avsnitt handlar om det - grunderna i Laravel-arbetsplaneringen.

Laravelvägen

I det tidigare avsnittet gick vi igenom det traditionella sättet att skapa cronjobb. I det här avsnittet kommer vi att gå igenom Laravel-specifikationerna i samband med API för uppgiftsschemaläggning.

Innan vi går vidare är det viktigt att förstå att den schemaläggningsfunktion som Laravel erbjuder är precis som vilken som helst annan funktion och kommer inte att åberopas automatiskt. Så om du funderar på att du inte behöver göra något på systemnivå så är du otur, säger jag.

Faktum är att det första du bör göra om du vill använda Laravel schemaläggningssystemet är att ställa in cronjobbet som körs varje minut och kallar artisan-kommandot som visas i följande kod.

* * * * * php / path-to-your-project / artisan schema: kör >> / dev / null 2> & 1

Ovanstående artisan kommando kallar Laravel schemaläggaren, och som i sin tur exekverar alla pågående cron jobb definierade i din ansökan.

Självklart är vi ännu inte med att se hur du definierar de schemalagda uppgifterna i din Laravel-applikation, och det är det allra första vi kommer att dyka in i.

Det är schema metod för App \ Console \ Kernel klass som du behöver använda om du vill definiera programspecifika schemalagda uppgifter.

Fortsätt och ta tag i innehållet i app / Konsol / Kernel.php fil.

kommandot ( 'inspirera') -> timme (); 

Som du kan se ger själva kärnkoden ett användbart exempel. I ovanstående exempel kör Laravel inspirera hantverkare timme. Tycker du inte att syntaxen är så intuitiv i första hand?

Faktum är att det finns ett par olika sätt på vilka Laravel tillåter dig att definiera schemalagda uppgifter:

  • Använd stängning / callable.
  • Ring artisan kommandot.
  • Kör kommandot Shell.

Dessutom finns det gott om inbyggda schemaläggningsfrekvenser du kan välja mellan:

  • varje minut / var femte minut
  • timme / dag / vecka / kvartal / år
  • vid en viss tidpunkt på dagen
  • och många fler

Faktum är att jag skulle säga att den ger en komplett uppsättning rutiner så att du aldrig behöver röra på skalet för att skapa dina anpassade cronjobb!

Ja, jag kan säga att du är angelägen att veta hur du genomför dina anpassade schemalagda uppgifter, och det är vad jag också lovade i början av artikeln.

Skapa din första schemalagda uppgift i Laravel

Som vi diskuterade finns det olika sätt på vilka Laravel tillåter dig att definiera planerade uppgifter. Låt oss gå igenom var och en för att förstå hur det fungerar.

Den stängning / uppringningsbara metoden

Schemaläggnings API tillhandahåller ring upp metod som låter dig utföra en callable eller en stängningsfunktion. Låt oss se över app / Konsol / Kernel.php filen med följande kod.

ring (funktion () $ inlägg = DB :: tabell ('inlägg') -> välj ('user_id', DB :: raw ('count (*) som total_posts')) -> groupBy ('user_id') - > () användare (), (efterfrågade),> uppdatering (['total_posts' => $ post- > totalposter));) -> everyThirtyMinutes (); 

Som vi kan se har vi passerat stängningsfunktionen som första argumentet för ring upp metod. Vi har också satt frekvensen till var 30: e minut, så det kommer att genomföra stängningsfunktionen var 30: e minut!

I vårt exempel räknar vi de totala inläggen per användare och uppdaterar statistiktabellen i enlighet med detta.

Artisan Command

Bortsett från stängningar eller callables, kan du också schemalägga ett hantverkskommando som kommer att utföras med vissa intervall. Faktum är att det borde vara det föredragna tillvägagångssättet vid nedläggningar, eftersom det ger bättre kodorganisation och återanvändning samtidigt.

Gå vidare och se över innehållet i app / Konsol / Kernel.php filen med följande.

kommandot (statistik: användar) -> everyThirtyMinutes ();  / ** * Registrera de avslutningsbaserade kommandona för programmet. * * @return void * / skyddade funktionskommandon () kräver base_path ('routes / console.php'); 

Det är kommando metod som du skulle vilja använda om du vill schemalägga ett hantverkskommando som visas i ovanstående kodbit. Du måste vidarebefordra den artisanska kommandosignaturen som första argumentet för kommando metod.

Naturligtvis måste du definiera motsvarande artisan kommando också på app / Konsol / Kommandon / UserStatistics.php.

välj ('user_id', DB :: raw ('count (*) som total_posts')) -> groupBy ('user_id') -> get (); // Uppdatera statistik tabellen för ($ inlägg som $ post) DB :: tabell ('users_statistics') -> where ('user_id', $ post-> user_id) -> uppdatering (['total_posts' => $ post- > total_posts]); 

Exec-kommandot

Vi kan säga att de metoder vi hittills har diskuterat var specifika för Laravel-ansökan själv. Dessutom tillåter Laravel dig också att schemalägga skalkommandon så att du kan köra externa applikationer också.

Låt oss gå igenom ett snabbt exempel som visar hur man tar backup av din databas varje dag.

exec ("mysqldump -h $ host -u $ användarnamn -p $ password $ database") -> dagligen () -> sendOutputTo ('/ backups / daily_backup.sql'); 

Det framgår av den kod som du behöver använda exec metod för schemaläggaren, och du måste skicka det kommando som du vill köra som första argument.

Utöver det har vi också använt sendOutputTo metod som låter dig samla kommandot. Å andra sidan finns det en metod, emailOutputTo, som låter dig maila utdatainnehållet!

Och det tar oss till slutet av artikeln. I själva verket har vi precis repat ytan på Laravel Scheduling API, och det har mycket att erbjuda i sin kitty.

Slutsats

Idag gick vi igenom API-programmet för uppgiftsschemaläggning i Laravel-webbramen. Det var fascinerande att se hur enkelt det låter dig hantera uppgifter som måste köras regelbundet.

I början av artikeln diskuterade vi det traditionella sättet att upprätta planerade uppgifter, och efter det introducerade vi Laravel sättet att göra det. I den senare halvan av artikeln gick vi igenom ett par praktiska exempel för att demonstrera uppdragsplaneringskoncept.

Jag hoppas att du har haft den här artikeln, och du borde känna dig mer självsäker när du planerar att skapa planerade uppgifter i Laravel. För er som antingen bara börjar med Laravel eller vill utvidga din kunskap, webbplats eller ansökan med tillägg, har vi en mängd olika saker du kan studera i Envato Market.

Om något dyker upp i ditt sinne, låt oss börja en konversation med hjälp av flödet nedan!