Cron är ett Unix/Linux-verktyg som vanligtvis används för att schemalägga kommandon eller ett skript på en webbserver som körs i bakgrunden. Ett cron-job är själva uppgiften, som används för att schemalägga uppgifter vid periodiska fasta tider, datum eller intervaller. Det handlar vanligtvis om repetitiva uppgifter som automatiseras för att spara tid. I WordPress så hanteras detta av WP-Cron, som används för att simulera en systemcron.

Några exempel på ett WordPress-cronjob kan exempelvis vara att schemalägga ett inlägg som ska publiceras eller att en säkerhetskopieringsplugin körs enligt ett fördefinierat schema. Idag så ska vi djupdyka i hur man enkelt skapar, ändrar och kör ett WordPress cron-job.

Så här ställer du in ett Cron Job i WordPress

Det är viktigt att notera att WP-Cron skiljer sig något från en systemcron. De har var och en sina egna för- och nackdelar. WP-Cron bygger exempelvis helt på intervaller, medan en systemcron bygger på specifika tider.En WP-Cron fungerar även bara när sidan laddas (backend eller frontend), vilket kan vara mindre tillförlitligt. De standardintervall som tillhandahålls av WordPress är varje timme, två gånger om dagen och varje dag.

För att schemalägga WP-Cron-händelser så måste du skapa anpassade krokar. Vi rekommenderar att du kollar in den officiella WordPress-pluginhandboken som har en fantastisk guide om schemaläggning av WP Cron-händelser. Om du letar efter ett alternativt sätt att konfigurera en systemcron med WordPress så rekommenderar vi att du kollar in Tom Mcfarlins artikel om att definiera ett WordPress cron-job. För dem som kanske inte är lika avancerade kommer vi att utforska hur man enkelt kan använda WP-Cron tillsammans med det populära kostnadsfria pluginet WP Crontrol. Detta låter dig visa och kontrollera vad som händer i WP-Cron-systemet.

WP Crontrol
WP Crontrol

WP Crontrol har över 200 000 aktiva installationer med ett imponerande betyg på 4,5 av 5. Många människor i WordPress-communityt älskar verkligen detta plugin.

Detta plugin är väldigt användbart, visar exempelvis vilka CRON-job som ska köras. Pluginet är ett utmärkt första steg för att förstå vad som händer och om det fungerar eller inte. 5 stjärnor bara för det. Du kan dessutom skapa nya cron-job och trigga befintliga, 5 bonusstjärnor på toppen. – Josh, skapare av Caldera Forms

Du kan ladda ner pluginet från WordPress-arkivet eller genom att söka efter det i din WordPress-instrumentpanel under ”Lägg till nytt plugin”. Funktionerna i WP Control inkluderar:

  • Möjlighet att visa alla cron-händelser tillsammans med deras argument, återkommande händelser och nästa körtid.
  • Redigera, ta bort och kör alla cronhändelser omedelbart.
  • Lägg till nya cronhändelser.
  • Lägg till, redigera och ta bort anpassade cronscheman.

Server Cron

Om du är en Kinsta-kund så har vi även ett cronjobb på servern som körs på alla webbplatser var 15:e minut. Läs vår artikel om hur du hanterar servercrons på Kinsta.

WP-Cron-scheman

När du har aktiverat så kan du ändra WordPress Cron-jobscheman under ”Cron Scheman” från inställningarna i din WordPress-instrumentpanel. Lägg märke till att pluginet lägger till ytterligare ett standardschema varje vecka. Du kan även lägga till ytterligare scheman i sekunder, exempelvis 21600 sekunder för var sjätte timme.

WP Cron-scheman
WP Cron-scheman

Dessa intervaller kan även läggas till med kod med hjälp av ett filter, exempelvis:

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
 $schedules['five_seconds'] = array(
 'interval' => 5,
 'display' => esc_html__( 'Every Five Seconds' ),
 );

return $schedules;
 }

WP-Cron Händelser

Du kan även använda pluginet för att se dina aktuella WordPress Cron-job som redan är schemalagda. Under Verktyg så klickar du på ”Cron Händelser”. Många av åtgärdsnamnen är lätta att känna igen eftersom de ska matcha en del av plugin-namnet, exempelvis ”woocoomerce_cleanup_sessions” eller ”gravityforms_cron”.

WP-Cron händelser
WP-Cron händelser

Du kör en Cron-händelse omedelbart genom att helt enkelt klicka på ”Kör nu” bredvid åtgärdsnamnet. Detta kan vara till hjälp när du felsöker saker eftersom du kanske behöver köra en Cron-händelse flera gånger.

Framgångsrikt utförd cron-händelse
Framgångsrikt utförd cron-händelse

Ändra Cron-händelse

Du kan även redigera befintliga Cron-händelser genom att klicka på ”Redigera” bredvid åtgärdsnamnet. Du kan då ändra åtgärdens namn, argument, nästa körning och schemalagd återkommande händelse. Var dock försiktig med detta eftersom många plugins är beroende av sina Cron-aktiviteter för att fungera korrekt.

Modifiera Cron-händelser
Modifiera Cron-händelser

Lägg till Cron-händelse

Du kan även lägga till Cron-händelser. I det här exemplet så kommer vi att lägga till WordPress Cron-job för Disqus-pluginet. Många kanske vill göra detta för att ändra synkroniseringsfrekvensen. Det kan även hända att de har problem med kommentarer som synkroniseras fram och tillbaka. Varje tredjepart-pluginutvecklares dokumentation bör ha namnet på deras cronhändelse, eller snarare åtgärdsnamnet. I det här fallet så är det ”dsq_sync_forum” som används av pluginet.

Om du skapar ett från grunden så behöver du en motsvarande åtgärdskrok någonstans i din kod. Den kan exempelvis vara i din functions.php-fil. Detta är det exempel som WP-Crontrol ger:

add_action( 'my_hookname', 'my_function' );

Nästa steg är att skriva din funktion.

function my_function() {
    wp_mail( '[email protected]', 'WP Crontrol', 'WP Crontrol rocks!' );
}

För Disqus så lägger vi först till ett nytt cronschema på 600 sekunder (10 minuter). Vi klickar sedan på ”Lägg till Cron Händelse” och anger ”dsq_sync_forum” som vårt åtgärdsnamn. Efter detta så väljer vi nästa körtid och den 10-minuters återkommande tid som vi just har skapat. Sedan klickar vi på ”Lägg till Cron Händelse”. Detta kommer nu att köras automatiskt var 10:e minut. Som ett resultat så kan vi manuellt synkronisera Disqus-kommentarer tillbaka till vår WordPress-databas.

Lägg till WordPress Cron job
Lägg till WordPress Cron job

Och det var allt! Det är verkligen ganska enkelt att använda.

WP-Cron WP-CLI

Du kan även hantera WP-Cron-händelser och eller ett WordPress Cron-job i WP-CLI. Följande kommando ger dig exempelvis din aktuella cronhändelselista.

wp cron event list

wp-cron event list

Se den officiella WP-CLI cron-dokumentationen för ytterligare kommandon och parametrar.

Så här lägger du till ett Cron Job med cPanel

Om du använder en hosting-leverantör som ger dig tillgång till ett cPanel-konto så kan du använda kontrollpanelen för att ställa in cron-job. Du gör detta genom att logga in på ditt cPanel-konto och gå till Avancerat > Cron job:

Cron Jobs i cPanel
Cron Jobs i cPanel

På sidan med inställningar för Cron Jobs så finns alternativ för att ställa in meddelanden om cronjobs och om att skapa nya cronjobs. Om du vill lägga till ett cronjob så scrollar du ner till avsnittet Lägg till nytt cronjob.

Här kan du konfigurera frekvensen för kommandot:

Lägg till nytt Cron Job
Lägg till nytt Cron Job

Menyn Gemensamma inställningar inkluderar flera förkonfigurerade alternativ, från en gång per minut till en gång per år. Du kan använda något av dessa alternativ eller ändra fälten nedan för att ange ett eget värde:

Ange egna värden
Ange egna värden

När du har konfigurerat frekvensen för cron job så kan du lägga till kommandot som det ska utföra under fältet Kommando. Spara cronjob genom att klicka på Lägg till nytt cron job. Nu kommer det att visas under listan Nuvarande Cron Jobs längst ner på sidan.

Så här lägger du till ett Cron Job i NGINX

Att lägga till ett cronjobb i NGINX är relativt enkelt om du är bekväm med att använda terminalen och skriva skript. För att komma igång så öppnar du terminalen och skriver följande kommando:

Sudo crontab -e

Detta kommer att öppna konfigurationsfilen för cron. Varje rad i filen innehåller ett unikt cron job som ska se ut så här:

0 13 * * * /var/www/public_html/cron.php >/dev/null

För att lägga till ett nytt cron job i NGINX så måste du förstå vad det kommandot gör. De första siffrorna och asteriskerna anger när cronjob ska köras.

Varje siffra eller symbol representerar följande värden, i turordning från vänster till höger:

  1. Minut
  2. Timme
  3. Månadens dag
  4. Månad
  5. Veckodag

Det kommandot säger åt NGINX att köra filen cron.php varje dag klockan 13 på pricken. Vi använder asterisker för resten av värdena eftersom de inte är nödvändiga för det här specifika cronjobbet. Detta kan dock variera beroende på vad du tycker.

Utöver att ange vilken fil som ska köras, så talar kommandot även om för cron job att det ska kasta all utdata. Exempelvis fel med tillägget >/dev/null. Alternativt så kan du välja att spara all sådan utdata till en loggfil.

När du är klar med att ändra cron-konfigurationsfilen så kan du spara dina ändringar och stänga den. Nu kommer din NGINX-server att köra detta cron job med den konfiguration som du har ställt in för detta.

Så här lägger du till ett cron job i Kinsta

Det finns två sätt att lägga till ett cron job i Kinsta. Det första sättet innebär att du får tillgång till din webbplats via SSH och kör kommandot crontab -e.

När du kör det kommandot så kommer Kinsta att fråga dig vilken redigerare som du vill använda. Därefter så öppnas cron-konfigurationsfilen med hjälp av den redigeraren.

Du kan lägga till cron job i konfigurationsfilen genom att skapa nya kommandon på separata rader. Ett cron job-kommando bör se ut så här:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Du kan läsa mer om hur du strukturerar cron-kommandon i föregående avsnitt, där vi tittade på hur du använder kommandot crontab -e i NGINX. Om du hellre vill slippa lägga till cron job manuellt så kan du be Kinsta-supportpersonalen att göra det åt dig.

Tänk på att Kinsta inte kan redigera cron job åt dig och vi kommer helt enkelt att ladda upp kommandona så som du anger dem. Om du behöver hjälp med att konfigurera cron-kommandot så rekommenderar vi att du kollar in denna crontab-dokumentation.

Hur man inaktiverar WP-Cron

I vissa fall så kan användningen av WP Cron-funktionen orsaka problem med din webbplats. WP-Cron är inte ett ”riktigt” cron job, utan en funktion som efterliknar hur de fungerar. Istället för att köra det kontinuerligt så kör WordPress skriptet wp-cron.php varje gång som en sida laddas.

Detta tillvägagångssätt kan orsaka problem med webbplatser med hög trafik. Du måste nämligen avsätta resurser för att köra wp-cron.php vid varje sidladdning. Om skriptet inte körs på grund av sidladdningar så kan dina schemalagda kommandon misslyckas med att utföras. Du ”kontrollerar” inte wp-cron.php inte intervallerna.

Om du har problem med WP-cron så kan du inaktivera funktionen genom att lägga till följande kod i WordPress-filen wp-config.php:

define('DISABLE_WP_CRON', true);

Spara ändringarna i filen, sen är det klart. Om du väljer att inaktivera WP-Cron så måste du dock konfigurera ett alternativ med hjälp av någon av de tidigare metoderna i den här handledningen.