Problema con ejecucion de Cron Jobs en WordPress

Chapi

Delta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Ago 2011
Mensajes
618
Tengo el sitio corriendo sobre wordpress en un theme que cree yo.

El sitio lo tenia corriendo en hostgator, funcionaba todo bien pero dentro de poco no le iba a alcanzar con el shared de ahi e iba a tener problemas, asi que decidi mudarlo a banahosting por haber leido muy buenos comentarios y para probar si con LiteSpeed realmente funcionaba mejor que con Apache.

Hice toda la migracion, el sitio esta funcionando muy bien en banahosting y los recursos del shared le sobran por ahora (en cuanto a rendimiento funciona mucho mejor que en hostgator).

El unico problema que tengo es que los cron jobs no se estan ejecutando y no encuentro la razon.
Cuando me di cuenta que pasaba esto instale el plugin 'WP control' que te deja administrar los cron programados, crear nuevos y tambien ejecutarlos desde ahi mismo.
El plugin muestra la hora y la fecha de cuando es la proxima ejecucion de cada proceso programado, todos los procesos estan con fecha de ayer y marcan que deberian ejecutarse en el proximo request al sitio, pero esto no pasa. E tratado de correr desde ahi mismo el proceso mas importante para mi pagina que controla varias cosas y si bien sale un cartel diciendo que se ejecuto con exito, realmente no se ejecuta la funcion que deberia llamar. He probado llamar a la funcion que deberia ejecutar el cron cuando se loguea el admin (mediante codigo en el functions.php de mi theme), para ver si en este host la funcion en si da algun error, pero se ejecuta perfectamente y hace lo que tiene que hacer.
Resumiendo, los cron no se ejecutan y no se por que.
Alguna sugerencia?

La migracion la hice de la siguiente forma:
- Instale wordpress desde cero en banahosting.
- Instale todos los plugins que utilizo
- Instale un plugin desarrollado por mi y el theme
- Fui a hostgator e hice un backup completo de la base de datos mediante phpmyadmin
- En hostgator copie la carpeta wp-contents/uploads
- Fui a banahosting y pise la base de datos de la instalacion nueva de wordpress con el backup anterior
- En banahosting subi la carpeta wp-contents/uploads

Me fije si en wp-config.php tengo
PHP:
define('DISABLE_WP_CRON', true);
Y no esta, pero por las dudas agregue la definicion en true.

Revise el archivo wp-cron.php y no encontre nada raro.

---------- Post agregado el 21-jul-2013 hora: 18:27 ----------

Añado algo extraño, en teoria si entro con el navegador a misitio/wp-cron.php deberian ejecutarse las tareas programadas, pero tampoco se ejecutan, el request devuelve un 200 asi que no seria tampoco problema que el archivo este bloqueado por algo raro (regla en el .htaccess o lo que sea).

Tambien me fije en la configuracion de WP Super Cache para ver si este plug in no me habia creado de alguna forma una version cacheada del archivo y en las exclusiones tiene bien puesto que no cachee nada que coincia con wp-.*\.php (entre otras reglas).
 
Última edición:

luiss1992

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
27 Ene 2013
Mensajes
52
Precisamente esa línea hace que se deshabilite el cron , prueba a borrarla o bien poner "false". De todas formas pregunta donde tienes tu sitio alojado, deberían ayudarte o al menos nosotros lo hacemos de esa forma, prestar hosting y a parte soporte técnico gratis.

Por cierto, si no te funciona con eso, prueba a poner esto. Pero antes tendrías que quitar esa.

define('ALTERNATE_WP_CRON', true);
 
Última edición:

Chapi

Delta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Ago 2011
Mensajes
618
Es que la linea no existia, como comente, y yo la cree poniendolo en false como me estas comentando ahora, el mismo resultado.
Estuve debugueando un poco el archivo wp-cron.php y todavia no identifico el problema exacto, pero tiene que ver con las fechas.

Hay una condicion de comparacion de fechas y si se cumple hace un return. Accediendo directamente al archivo y evitando ese return las tareas se ejecutan. Pero igualmente dejando eso comentado, las tareas solo se ejecutan accediendo directamente al archivo, no automaticamente. Tengo que seguir haciendo pruebas.
 

luiss1992

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
27 Ene 2013
Mensajes
52
pero dejando solamente esta línea funciona?

define('ALTERNATE_WP_CRON', true);
 

Chapi

Delta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Ago 2011
Mensajes
618
Si, con ALTERNATE_WP_CRON funciona, pero no me parece lo ideal.

Estuve leyendo que es lo que activa esa constante, y hace que la ejecucion de los cron se haga de una forma distinta.
Al final tenes usuarios que de vez en cuando son redirigidos a la misma pagina que estan visitando (con esto no habria problemas porque el usuario no se da cuenta) pero en la url se agrega el parametro doing_wp_cron (y este parametro es el que no me gusta)

Algunas de las razones por las que las tareas programadas no se ejecuten son las siguientes:
- Server doesn't have DNS, and so it can't figure out who "example.com" is, even though it is *itself*.
- Server administrators, in a misguided attempt at security, have blocked "loopback" requests, so it can't actually make a call back to itself.
- Server is running something called "mod_security" or similar, which actively blocks the call due to brain-dead configuration.
- Something else.

Asi que tendre que consultar con banahosting si algo de esto aplica a su server.

Cualquier otra sugerencia que tengas la pruebo.

Muchas gracias.
 

luiss1992

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
27 Ene 2013
Mensajes
52
Si tienes el w3 total cache, con eso no funciona... Prueba a ir deshabilitando plugins es otra opción.
 

Chapi

Delta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Ago 2011
Mensajes
618
No uso w3 uso wp super cache. Pero todos los plugins que estoy usando son exactamente los mismos que tenia en hostgator. Y con exactamente los mismos no me refiero que son el mismo plugin, si no que copie las carpetas de cada plugin de un host a otro.

No cree ticket todavia a banahosting porque directamente configure un cron real que cada 1 hora haga un wget a sitio/wp-cron.php?doing_wp_cron y desacteve el proceso que hace el triger desde wordpress
define('DISABLE_WP_CRON', true);

De esta forma estoy conforme, las tareas programadas se ejecutan (aunque pueden llegar a tener un retraso de hasta 59 minutos en el peor de los casos) y ningun usuario ve nada raro en la url.