Dansk hosting fra Aalborg
100% CO₂-neutral hosting
24/7/365 dansk support
support@hostious.io
● Hostious viden · artikel

Forfaldne planlagte handlinger i WooCommerce

Skrevet af , stifter af Hostious · Udgivet 28. august 2026 · Opdateret 30. august 2026
Forfaldne planlagte handlinger i WooCommerce

Kort svar: Nogle få handlinger, der er kortvarigt forfaldne, er normalt på et WordPress-site, fordi køen blandt andet startes af WP-Cron og besøg. En voksende kø eller mange handlinger, der er mere end et døgn gamle, kræver diagnose. Filtrer efter status, hook og gruppe, åbn handlingsloggen, og find det plugin, der ejer jobbet. Kør ikke alt manuelt og slet ikke failed/pending-jobs uden at kende deres forretningseffekt.

Fagligt gennemgået: 28. august 2026

Kontrolgrundlag: WordPress 7.1, WooCommerce 11.0.1 og PHP 8.4.23 på isoleret staging samt aktuel produktdokumentation. Køens størrelse og acceptable forsinkelse afhænger af butikkens egne hooks og driftsmønster.

Action Scheduler behandler blandt andet mails, webhooks, betalinger, lagerjobs og abonnementer. “Forfalden” beskriver tidspunktet, ikke automatisk en fejl. En handling kan stå få minutter over tid og blive kørt ved næste runner. Det alvorlige signal er alder, vækst, gentagne failures og den forretningsfunktion, hooket tilhører.

Pending, In-progress og Failed betyder ikke det samme

Pending venter på planlagt tidspunkt eller runner. In-progress er claimet af en proces og kan være legitimt aktiv; en gammel claim kan dog pege på timeout/crash. Failed har gennemført et forsøg, som schedulerens log registrerer som mislykket. Løsningen er derfor ikke “kør alle”: en pending backlog kræver runnerkapacitet, mens repeated failed kræver rettelse af handleren.

Completed-historik er nyttig som throughput-baseline. Hvis 500 jobs gennemføres pr. time, og 50 nye kommer til, falder køen. Hvis 600 nye kommer til, vokser den trods en fungerende runner.

Syntetisk Action Scheduler-handling med hook, gruppe og planlagt tidspunkt
WooCommerce 11.0.1 med syntetisk handling oprettet 28. august 2026 på isoleret staging. Rækken illustrerer felterne; den er fremtidig og beviser ikke en forfalden eller fejlet kø.

Lav en risikofri køstatus

  1. Gå til WooCommerce → Status → Planlagte handlinger.
  2. Notér antal Pending, In-progress, Failed og Complete samt tidspunkt.
  3. Sorter pending efter planlagt dato og find den ældste handling.
  4. Grupper de forfaldne efter hook og gruppe. Notér de fem største ejere.
  5. Åbn loggen for én repræsentativ handling fra hver gruppe.
  6. Kontroller WordPress Site Health for cron-/loopbackfejl og WooCommerce Logs for fatal errors på samme tidspunkt.

Denne optælling er dit før-bevis. Et screenshot af “1000 pending” uden alder og hookfordeling kan ikke afgøre, om køen er fastlåst eller blot arbejder.

Diagnoseoversigt

FundSandsynlig forklaringKontrolNæste skridt
Få jobs, minutter forfaldneNormal trafik-/cronforsinkelseNy status efter 10–15 min.Observer, ingen ændring
Kø vokser mellem to målingerRunner kan ikke følge med eller jobs fejlerAlder, throughput og logsFind flaskehals/hookejer
Kun ét hook fejlerPlugin-/integrationsfejlHandlingslog og pluginlogRet ejerpluginet
Alle hooks er forfaldneWP-Cron, loopback eller serverproblemSite Health og HTTP-logRet runner-infrastruktur
Mange In-progress sidder fastTimeout, process-crash eller lockAction log og PHP-workerEskalér med timestamp
Failed har samme fejltekstReproducerbar kode-/API-fejlEn repræsentativ logRet årsagen før retry
Køen eksploderer efter import/opdateringForventet batch eller regressionJobgruppe og release-tidThrottle/rollback efter ejerens design

Løsning i den sikreste rækkefølge

1. Identificer forretningseffekten

Oversæt hooknavnet til funktionen: sender det mails, fornyer abonnementer, leverer webhooks, synkroniserer lager eller rydder cache? Et kosmetisk analysejob og et betalingsjob har ikke samme prioritet. Hvis ejeren er ukendt, søg hooknavnet i pluginfilerne på staging eller send det til udvikleren. Slet ikke jobbet for at få tælleren til nul.

2. Læs handlingsloggen

Loggen viser oprettelse, forsøg, runner og fejl. Kopiér kun den relevante redigerede fejltekst og action-ID. Se efter PHP-fatal, manglende callback, API-timeout, ugyldig ordre/reference eller memory/time limit. Ret den første konkrete fejl, ikke den efterfølgende kø.

3. Kontroller WP-Cron og loopback

Action Scheduler startes normalt via WP-Cron og kan fortsætte med asynkrone loopback-kald. Hvis Site Health viser et cron- eller loopbackproblem, test det specifikke endpoint og se webserver-/WAF-log. En sikkerhedsregel må ikke åbnes bredt; dokumenter den præcise blokerede request.

Lavtrafik- og staging-sites kan behandle sjældnere, fordi WP-Cron afhænger af aktivitet. En rigtig server-cron kan være relevant, men den skal koordineres med hosting og den eksisterende DISABLE_WP_CRON-opsætning. Slå ikke WP-Cron fra, før en ekstern runner er verificeret.

4. Kør én ufarlig repræsentativ handling

Efter backup og kun når hookets sideeffekt er kendt kan en enkelt pending handling køres fra admin. Observer log, runtime og resultat. Kør ikke betalings-, refund-, mail- eller fulfillmentjobs manuelt uden ejerens procedure.

Hvis én handling lykkes, men køen fortsat vokser, er throughput problemet. Hvis den fejler identisk, er koden/integrationen problemet.

5. Ret plugin-/API-fejlen

Opdater eller rollback den ansvarlige udvidelse på staging, korriger credentials/destination uden at eksponere dem, eller ret den eksterne API-fejl. Gentag med én testhandling. Failed-jobs retryes kun, hvis handleren er idempotent og leverandøren beskriver det som sikkert.

6. Skaler køen kontrolleret

Store køer bør behandles med overvåget server-/WP-CLI-runner af hosting eller udvikler. Højere batch, concurrency og time limit kan øge database-, PHP- og API-belastning voldsomt. Tag før-/efter-målinger af CPU, memory, database locks, fejlrate og frontend-responstid. Stop ved degradering.

7. Ryd historik til sidst

Completed/canceled historik kan normalt ryddes af schedulerens housekeeping. Failed-handlinger er diagnosebevis. Ryd kun gamle failures efter retentionpolitik, backup og bekræftet løsning. Pending jobs må ikke slettes som “oprydning”.

Mål køen som en tidsserie

Brug tabellen som arbejdsark med egne observationer. Hvis den deles med andre, skal tal og hooknavne være relevante, reproducerbare og anonymiserede:

UTC-tidPendingÆldste pendingIn-progressFailedCompleted siden sidstNye siden sidst
StartmålingNotér antalNotér alderNotér antalNotér antal
Efter 15 min.Notér antalNotér alderNotér antalNotér antalBeregn forskelBeregn forskel
Efter 60 min.Notér antalNotér alderNotér antalNotér antalBeregn forskelBeregn forskel

Et enkelt snapshot kan ikke vise retningen. Mindst tre målinger med samme filter afslører, om køen drænes, er stabil eller vokser. Segmenter derefter efter hookgruppe; et sundt analysejob kan ellers skjule en fastlåst betalingsgruppe i totalen.

Gentagne handlinger kan blive ved med at genskabe køen

Hvis et recurring job fejler, kan en ny forekomst allerede være planlagt. Find både den failed instans og den næste pending. At slette den gamle failure stopper ikke producenten. Ret koden, konfigurationen eller det eksterne API, og bekræft derefter at næste planlagte test kører korrekt.

Beregn om runneren faktisk indhenter køen

Se ikke kun på, hvor mange jobs der bliver gennemført. Sammenlign gennemførte og nye jobs i samme interval. Hvis runneren gennemfører 300 handlinger på en time, mens plugins opretter 420, vokser backloggen med 120, selv om loggen er fuld af succeser. Den ældste pending vil typisk også blive ældre.

Segmentér beregningen efter hook eller gruppe. En stor strøm af hurtige cachejobs kan få total throughput til at se sundt ud, mens en betalingsgruppe ikke flytter sig. For hver kritisk gruppe noteres nytilgang, gennemførte, fejl og alderen på den ældste handling. Det er den konkrete servicehastighed, der afgør, om kapacitet eller kode skal rettes.

Brug også runtimefordelingen. Hvis de fleste handlinger tager under et sekund, men ét API-hook gentagne gange bruger hele timeoutvinduet, kan det ene hook blokere workers og skabe kø for alle andre. Ret eller isolér den langsomme integration, før globale batchgrænser hæves.

Stopkriterier ved manuel eller CLI-baseret behandling

En overvåget runner skal have klare stopkriterier: stigende fatal-rate, database locks, checkoutforværring, hukommelsesfejl eller gentagne eksterne API-afvisninger. Notér baseline for frontend og checkout før køen behandles, og stop hvis driften forringes mærkbart.

Kørsel må heller ikke fortsætte, hvis et hook viser ikke-idempotente sideeffekter. En “succesfuld” genkørsel kan sende en mail, hæve en betaling eller oprette en fragtlabel igen. Når hookets kontrakt er ukendt, er leverandørens dokumentation eller udviklerens kodegennemgang næste skridt – ikke en større batch.

Verifikation

  • Mål pending/failed og ældste pending ved start, efter 15 minutter og efter en time.
  • Køens alder og antal skal falde uden stigende fatal-/timeout-rate.
  • Den konkrete forretningsfunktion skal gennemføres: testmail, testwebhook eller sandboxjob efter type.
  • Site Health viser ingen relevant cron-/loopbackfejl.
  • Frontend og checkout forbliver stabile under behandlingen.

Rollback

Stop den nye runner eller sænk batch/concurrency til den dokumenterede tidligere værdi. Gendan pluginversion eller cronkonfiguration fra backup. Afbryd ikke en in-progress betaling eller fulfillmentproces uden systemejerens procedure.

Hvornår skal du eskalere?

Pluginudvikleren skal have hook, action-ID, args i anonymiseret form, log og version. Hosting skal have køvækst, cron-/loopbackrequest, serverfejl og ressourcegraf. Se WooCommerce hosting hos Hostious ved server-side queue-drift.

Køen bør ikke afhænge af, om der tilfældigvis kommer besøgende. På WooCommerce hosting hos Hostious sættes et rigtigt cron-job op fra start, netop derfor.

Ofte stillede spørgsmål om planlagte handlinger

Er forfaldne handlinger i Action Scheduler et problem?

Få kortvarigt forfaldne er normalt. En voksende kø eller handlinger, der er timer/dage gamle, betyder at køen ikke bliver kørt – typisk fordi WP-Cron ikke udløses pålideligt.

Hvordan får jeg køen til at køre stabilt?

Erstat WP-Cron med et rigtigt server-cronjob, der kalder wp-cron.php hvert minut eller kører via WP-CLI. Så er køen uafhængig af besøgstal og loopback-problemer.

Må jeg slette gamle handlinger i køen?

Kun fejlede/annullerede og kun når du ved, hvilket plugin de tilhører. Afventende handlinger kan være mails, lagersync og abonnementstræk – kør dem frem for at slette dem.

Læs også

Dokumentér køens udvikling – ikke kun et øjebliksbillede

Gem statusfanernes tællinger, hookfilteret, en anonymiseret handlingslog og Site Health-resultatet for cron og loopback. Notér antal og alder pr. hook, fordi 500 ventende oprydningsjobs ikke har samme forretningsrisiko som fem forsinkede abonnementsbetalinger.

Mål mindst tre tidspunkter med samme filtre. En CSV med status, alder og runnerens gennemløb gør udviklingen synlig. Kør kun en ufarlig repræsentativ testhandling, og bekræft dens resultat i både Action Scheduler-loggen og det system, den skulle påvirke. Testen er først overbevisende, når der ikke opstår nye fejl i observationsperioden.