Come testare wp_cron?

11 apr 2011, 00:27:26
Visualizzazioni: 23K
Voti: 29

Questa è una domanda un po' ingenua...

Ho programmato un'azione da eseguire ogni ora:

if(!wp_next_scheduled('my_hourly_events'))
  wp_schedule_event(time(), 'hourly', 'my_hourly_events');

add_action('my_hourly_events', 'the_function_to_run');

function the_function_to_run(){
   echo 'funziona!'; 
}

Come posso testare se funziona senza aspettare un'ora? :)

Ho provato ad aggiungere wp_clear_scheduled_hook('my_hourly_events'); prima di questo codice e aggiungere wp_cron() dopo, ma non vedo la mia funzione in esecuzione...

modifica:

ok, ho aggiunto un trigger_error() dentro la mia funzione, ho controllato il log degli errori di apache, ed è presente :)

Ora sono ancora più confuso:

  • Come può wp-cron essere eseguito in background? perché apparentemente è questo che succede se non vedo output...

  • questo non sembra funzionare in un contesto oggetto; perché?

3
Commenti

ok ho scoperto che wp-cron.php viene eseguito con wp_remote_post(). questo spiega tutto...

onetrickpony onetrickpony
11 apr 2011 02:33:18

Con "contesto oggetto", intendi che la tua callback è tipo array( &$this, 'my_method_name' )? Infatti non funzionerà perché il nome della funzione viene memorizzato nel database per essere eseguito successivamente. &$this si riferisce a un oggetto specifico, non a un nome di classe, e questo oggetto non esisterà alla prossima richiesta quando il cron job verrà eseguito. Una funzione statica di classe dovrebbe funzionare.

Jan Fabry Jan Fabry
11 apr 2011 12:34:30

sì, ho dovuto rendere la mia funzione statica. Non pensavo che wp avrebbe eseguito remotamente uno script locale come "cron"

onetrickpony onetrickpony
11 apr 2011 20:05:12
Tutte le risposte alla domanda 2
2
22

Il mio plugin preferito per questo è Core Control che ha un modulo molto utile per visualizzare cosa succede nel cron - quali eventi sono configurati, quando verranno eseguiti, ecc.

A livello di sporcarsi le mani, vedi _get_cron_array(), che restituisce i dati interni memorizzati per gli eventi cron (le chiavi di primo livello sono timestamp).

11 apr 2011 08:37:26
Commenti

L'HTTP Access Logger registra tutte le richieste o solo quelle effettuate con l'API HTTP di WP? È fantastico per trovare le richieste che i plugin fanno e capire perché la tua pagina carica lentamente :)

onetrickpony onetrickpony
11 apr 2011 20:12:30

@One Trick Pony non sono sicuro, ma avrebbe senso assumere che sia solo per l'API

Rarst Rarst
11 apr 2011 20:27:14
0

wp-cli è un altro modo:

Elenco degli Eventi

> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook              | next_run_gmt        | next_run_relative     | recurrence    |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 ore 24 minuti       | 12 ore        |
| wp_update_themes  | 2020-04-14 08:11:38 | 7 ore 24 minuti       | 12 ore        |
| wcsc_prime_sites  | 2020-04-14 17:00:55 | 16 ore 13 minuti      | 1 giorno      |
+-------------------+---------------------+-----------------------+---------------+

Pianifica un Evento

> wp cron event schedule wp_update_plugins "now +5 seconds"
Successo: Evento pianificato con hook 'wp_update_plugins' per il 2020-04-14 00:43:54 GMT.

Quindi puoi visitare il front-end del sito e aggiornare un paio di volte per assicurarti che sia attivato. Poi esegui di nuovo list per verificare che non sia più pianificato.

Esegui Direttamente nel Terminale

> wp cron event run wcsc_prime_sites
Eseguito l'evento cron 'wcsc_prime_sites' in 0.805s.
Successo: Eseguito un totale di 1 evento cron.

Una particolarità da tenere a mente è che wp-cli viene eseguito nel contesto di wp-admin, ma WP Cron viene eseguito sul front end. Di solito non è un problema, ma quando scrivi i job, assicurati di require() qualsiasi file di wp-admin/includes che il tuo codice si aspetta siano caricati.

Se non lo fai, il job funzionerà bene in wp-cli, ma produrrà un errore fatale quando verrà eseguito normalmente.

Altri comandi

Esegui wp help cron per maggiori dettagli.

14 apr 2020 03:59:10