Egy webáruház adatbázisa hónapok alatt a duplájára nő, pedig „semmi nem változott”, az oldal elöl gyors. Ilyenkor gyakran az Action Scheduler táblái a ludasak: több százezer sikertelen vagy függő feladat egy olyan bővítménytől, amelyet már rég eltávolítottak, és amelyet a rendszer újra és újra megpróbál lefuttatni.
A WordPressben két háttérfeladat-rendszer dolgozik egymás mellett, és ha valami elakad, mindkettőt érdemes megnézni:
- WP-Cron: a WordPress beépített ütemezője. Nem a szerver órájához igazodik, hanem a látogatásokhoz: minden oldalbetöltésnél megnézi, van-e esedékes feladat.
- Action Scheduler: a WooCommerce-szel érkező feladatsor, amelyet sok más bővítmény is használ (például a Yoast SEO, a MailPoet, előfizetéses és e-mail-küldő bővítmények). A feladatai az
actionscheduler_actionstáblában várakoznak, a naplója azactionscheduler_logstáblába kerül, és a futtatását alapból a WP-Cron indítja.
Az alábbi parancsokat egy WooCommerce-szel telepített teszt-webhelyen futtattuk a cPanel tárhely Terminaljában; a WP-CLI alapjait a WP-CLI használatáról szóló cikk írja le.
Az Action Scheduler állapota
SSH nélkül a WordPress admin felületén is megnézheti: a WooCommerce › Állapot oldalon az ütemezett műveletek (Scheduled Actions) fülén szűrhet állapotra (függő, sikertelen, kész) és a feladat nevére (hook). Parancssorból gyorsabb:
cd ~/public_html
wp action-scheduler status
Data store: ActionScheduler_HybridStore
Runner: ActionScheduler_QueueRunner
Version: 4.1.0
status count oldest newest
complete 1 2026-10-27 19:56:51 +0000 2026-10-27 19:56:51 +0000
pending 2 2026-10-27 19:57:51 +0000 2026-10-28 03:00:00 +0000
Egészséges webhelyen a pending (függő) feladatok száma kicsi, és a legrégebbi is csak néhány perce vár; a failed (sikertelen) feladatok száma kevés, és ismert az okuk. Ha a függő feladatok órák óta várnak, a futtatás akadt el; ha több ezer a sikertelen, egy bővítmény hibázik ismétlődően.
Melyik feladat hány példányban vár vagy hibázott?
wp action-scheduler action list --status=pending --fields=id,hook,group,scheduled_date --per_page=20
wp action-scheduler action list --status=failed --format=count
wp action-scheduler action logs 1234
Az utolsó parancs egy feladat naplóját mutatja, benne a hiba okával. Nagyobb tömegnél a feladatnevek szerinti összesítés SQL-ben gyorsabb. Az aWh cPanel szerverein a wp db query nem működik, ezért a mysql parancsot használja (a jelszót tartalmazó ~/.my.cnf beállítását a WP-CLI cikk írja le), vagy futtassa a lekérdezést a phpMyAdminban, a saját táblaelőtagjával:
P=$(wp db prefix)
mysql "$(wp config get DB_NAME)" -e "SELECT hook, status, COUNT(*) AS db FROM ${P}actionscheduler_actions GROUP BY hook, status ORDER BY db DESC LIMIT 20"
A WP-Cron állapota
wp cron event list --fields=hook,next_run_relative,recurrence
wp cron event list --due-now
Ha sok feladat már esedékes (--due-now), de nem fut le, a WP-Cron nem indul el rendesen: például mert kevés a látogató, vagy mert a DISABLE_WP_CRON be van kapcsolva, de nincs helyette szerveroldali időzítés.
Gazdátlan WP-Cron-feladatok (amelyek egy eltávolított bővítményhez tartoznak, és a hookjukra már semmi nem figyel):
wp eval 'foreach ( _get_cron_array() as $ts => $events ) { foreach ( $events as $hook => $x ) { if ( ! has_action( $hook ) ) echo "gazdátlan: $hook\n"; } }'
Egy ilyen feladatot így törölhet: wp cron event delete <hook>.
Takarítás
Előtte mentse el az adatbázist (mysqldump, lásd a WP-CLI cikket), mert a törlés nem vonható vissza.
1. A gazdátlan feladatok törlése
Keresse meg azokat a függő vagy sikertelen feladatokat, amelyekhez már nem tartozik bővítmény:
wp eval 'global $wpdb; foreach ( $wpdb->get_col( "SELECT DISTINCT hook FROM {$wpdb->prefix}actionscheduler_actions WHERE status IN (\"pending\",\"failed\")" ) as $h ) { if ( ! has_action( $h ) ) echo $h, "\n"; }' > ~/gazdatlan-feladatok.txt
cat ~/gazdatlan-feladatok.txt
Nézze át a listát; ha egy név ismerős, és a bővítménye még kell, ne törölje. A függő feladatokat a nevük alapján vonhatja vissza:
while IFS= read -r hook; do wp action-scheduler action cancel "$hook" --all; done < ~/gazdatlan-feladatok.txt
A visszavont (canceled) és a régi sikertelen feladatokat a következő lépés takarítja el.
2. A régi feladatok és naplók törlése
Az Action Scheduler a kész és a visszavont feladatokat alapból körülbelül egy hónap után törli. A sikerteleneket nem, és ha a takarítás valamiért nem fut, minden megmarad. Kézzel, kis adagokban:
wp action-scheduler clean --status=complete,failed,canceled --before='14 days ago' --batch-size=500 --pause=1
Az adagok közötti szünet (--pause) miatt a takarítás nem terheli le az adatbázist, és a webhely közben is gyors marad. A megőrzési időt egy must-use bővítménnyel rövidítheti (wp-content/mu-plugins/action-scheduler-megorzes.php):
<?php
/**
* Plugin Name: Action Scheduler: 14 napos megőrzés
*/
add_filter( 'action_scheduler_retention_period', function () {
return 14 * DAY_IN_SECONDS;
} );
3. A tábla tömörítése
A törlés felszabadítja a sorokat, de a tábla a lemezen akkora marad. Nagy takarítás után futtassa a phpMyAdminban (a táblákat kijelölve, Tábla optimalizálása), vagy:
mysql "$(wp config get DB_NAME)" -e "OPTIMIZE TABLE ${P}actionscheduler_actions, ${P}actionscheduler_logs"
A futtatás megbízhatóvá tétele
A WP-Cront a látogatások indítják, így egy éjszaka kevés forgalmú webáruházban a feladatok órákat késhetnek, csúcsidőben pedig egy nehéz feladat egy látogató oldalbetöltését lassítja. Bízza a futtatást a szerverre:
- Ha a webhelyet a WP Toolkit kezeli, a webhely kártyáján, a Teljesítmény résznél kapcsolja be a wp-cron.php fájl átvétele opciót.
- Kézzel: kapcsolja ki a WP-Cront a
wp-config.phpfájlban (define( 'DISABLE_WP_CRON', true );), és állítson be helyette cron-feladatot a cPanelben. A lépéseket a WP-Cron cseréjéről szóló cikk írja le.
Nagy forgalmú webáruháznál az Action Scheduler sorát külön cron-feladatban is futtathatja, korlátozott adagokban, hogy ne foglalja le az összes PHP-folyamatot. A cPanel Cron-feladatok felületén (Speciális csoport) például ötpercenként:
/usr/local/bin/wp --path=/home/felhasznalonev/public_html action-scheduler run --batch-size=25 --batches=4 > /dev/null 2>&1
Egy háttérfeladat, amely egy percnél tovább fut, és minden alkalommal ugyanott tart, korlátlan munkát végez: ezt a bővítmény fejlesztőjének kell javítania. A sok hirtelen beérkező rendelés (például egy akció idején) is egyszerre több ezer feladatot ütemezhet; ha ilyenkor a webhely lelassul, a CloudLinux erőforrás-használat megmutatja, melyik korlátba ütközik a fiók.
Rendszeres ellenőrzés
Nézzen rá havonta a wp action-scheduler status kimenetére. Ha a függő feladatok száma tartósan ezres nagyságrendű, vagy a sikertelenek gyűlnek, az egy bővítmény hibájának jele, és jobb hetek alatt észrevenni, mint egy év múlva, amikor az adatbázis már gigabájtos. Az adatbázis többi tábláját a wp_options és a wp_postmeta tábla tisztításáról szóló cikk tárgyalja.
