Pasé casi 3 días y no puedo entender y hacer que Magento Cron procese las tareas programadas. Estoy ejecutando Magento 1.9.1.0 y recientemente noté que los correos electrónicos de pedidos ahora están en cola en lugar de enviarse al instante. Entiendo la necesidad pero no puedo hacer que el sistema seleccione las colas.
Aquí está mi visión para Cronjob.
Aquí está mi línea de comando cronjob.
Así es como se crean las tareas en la tabla cron_schedule.
Como los registros se crean en la tabla cron_schedule, creo que el Cron se ejecuta una vez cada 5 minutos. Si elimino manualmente estos registros a través de PhpMyAdmin, los registros se crean automáticamente después de un tiempo.
Pero el estado de las tareas sigue "pendiente" y nunca se completa. No estoy seguro si algo anda mal en mi configuración o si me falta algo. ¿Puede alguien ayudarme a hacer que la tarea programada se ejecute a tiempo? Además, ¿por qué se crean múltiples registros para un código de trabajo?
Actualizar
Limpié toda la tabla y el cron creó los trabajos programados. Todos los trabajos están en estado pendiente y nunca se ejecutan, incluso esperando más de 60 minutos. Algo está mal en Magento 1.9.1
Actualización 11/02: Hoy hice un análisis más sobre el proceso.
Edité el cron.php como se muestra a continuación
echo 'iam before mdefault 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
echo 'iam before malways 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
echo 'i returned success';
Edité la clase Mage_Cron_Model_Observer como se muestra a continuación
public function dispatch($observer) {
echo 'iam inside dispath';
Comprendí que cuando el cron ejecuta -mdefault, debería llamar a la función de despacho y se ejecutará. Pero lo que sucedió fue como a continuación en la salida cron.
Content-type: text/html
iam before mdefault 1iam before malways 1i returned success
Significa que el despacho no llama a atall ...
Uno otro intento
Cambié manualmente la variable $isShellDisabled = true;
y cambié la siguiente en cron.php.
if ($isShellDisabled) {
echo 'before always';
Mage::dispatchEvent('always');
echo 'after always';
Mage::dispatchEvent('default');
echo 'after default';
} else {
Mage::dispatchEvent($cronMode);
}
La salida cron para lo anterior es la siguiente
Content-type: text/html
before alwaysiam inside dispath alwaysafter always
Ahora se llama 'dispatchAlways' pero no 'dispatch'
Ninguna de las respuestas me ayuda. Nunca escoge las tareas programadas. Es decir, cuando Cron se ejecuta por primera vez, creó con éxito las tareas en la tabla. Pero nunca ejecuta la tarea.
fuente
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
si está disponible.cron_schedule
mesa? Compruebe si se llena con nuevas tareas después de una hora más o menosRespuestas:
Era la versión PHP de Cron Jobs.
La versión de PHP se configuró correctamente para el sitio, por eso funcionaba; sin embargo, Cron Jobs se estaba ejecutando en el servidor PHP 5.3 nativo, razón por la cual recibía los errores solo cuando ejecutaba Cron. Actualicé a la versión 5.5.
Comando Cron modificado:
o en hostgator:
en cron.php
Después de esta línea, agregue:
fuente
php -v
en la terminal para ver qué versión de PHP está usando la terminal. En mi caso fue 5.6. Así que tuve que forzar el uso de PHP 7.0 cambiandophp
aea-php70
incrontab -e
. ¡Gracias!intentaste vaciar la
cron_schedule
mesa? Compruebe si se llena con nuevas tareas después de una hora más o menos.También puede usar Aoe_Scheduler para deshabilitar cronjobs específicos. Vea si alguno en particular puede causar un error que detenga todas las demás tareas.
La forma en que los cronjobs de Magento se configuran como un error fatal en un script hará que la ejecución de todas las tareas falle
fuente
Como primer paso, sugeriría revertir su configuración a la configuración cron predeterminada de Magento:
Hay un problema con su configuración actual: su programación se genera cada 15 minutos, pero solo se programa con anticipación durante 5 minutos, lo que deja un intervalo de 10 minutos.
fuente
$isShellDisabled = true;
y cuando inicio el Cron.php a través del navegador, los trabajos se seleccionan pero no a través de CronTab.php -f cron.php
y./cron.sh
vea si producen algo para investigar más a fondo.El mismo problema para mi.
Se encontró el error "Demasiado tarde ...".
Después de limpiar la
cron_schedule
tabla, cron.sh dejó de funcionar (ya no se programa).Funcionó solo después de matar todos los viejos procesos de Cron.
fuente
Yo tuve el mismo problema. Mi problema era específico de la zona horaria: las columnas
created_at
yscheduled_at
en lacron_schedule
tabla deberían ser UTC + 0, mis entradas eran UTC + 2.Para verificar esto, simplemente puede establecer las fechas desde
created_at
yscheduled_at
hasta ayer y esperar hasta la próxima programación cron.Espero que ayude a alguien!
fuente
En Bluehost, en cron.sh change
a
Por defecto en el alojamiento compartido, ejecuta PHP 5.2.
También tuve que cambiar
cron.php
, reemplazando las dos$isShellDisabled
líneas con$isShellDisabled = true;
Para deshacerme de las advertencias de PHP, también agregué estas líneas antes
fuente