¿Qué script cron es mejor ejecutar? cron.php o cron.sh

27

Magento proporciona dos scripts cron en su directorio raíz, cron.php y cron.sh.

¿Cuál es el mejor para correr y por qué?

Joe
fuente

Respuestas:

31

Sería mejor ejecutar cron.sh

A partir de Magento EE 1.13.xy CE 1.8.x, la mecánica de cron ha cambiado donde Magento ha introducido una nueva función de modo de programación.

Hay 2 modos disponibles: 1. predeterminado: ejecuta crons programados. 2. siempre: como su nombre lo indica, estas tareas se ejecutarán incondicionalmente cada vez que se active cron y no necesiten horarios definidos explícitamente.

Básicamente, cuando se llama a cron.php sin ningún parámetro, se utiliza shell_exec para ejecutar dos procesos de cron.sh. Cada uno con un parámetro diferente ("predeterminado" o "siempre"). Cron.sh a su vez pasa este parámetro de nuevo a cron.php que luego ejecuta el cron. Internamente, Magento utiliza su infraestructura de eventos para procesar los dos modos mediante el envío de eventos con los nombres "predeterminado" y "siempre". Mage_Cron luego implementa dos métodos de observación.

Mirando cron.php, notará el uso de la función PHP shell_exec. Además de ser un problema de seguridad, la función puede devolver NULL cuando se produce un error o el programa no produce ningún resultado. No es posible detectar fallas de ejecución con esta función. Esto significa que en cualquier momento dado cuando su script / código falla debido a un error, sucede lo siguiente: 1. El cronjob se vuelve obsoleto, 2. No se registra ningún error, 3. y nadie sabe que algo de esto ha sucedido.

Para superar esto, se deben agregar los siguientes cronjob:

*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default
*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always

Esto garantizará que los modos de proceso siempre se ejecuten sin utilizar la función de respaldo shell_exec y que el cron no se vuelva obsoleto ya que se produce una excepción si se produce un error.

Shaughn
fuente
Solo agregaré que la expresión cron de muestra anterior es bastante genérica. www-datacambiaría a cualquier usuario que ejecute procesos del servidor web. También vale la pena señalar que para muchas configuraciones de alojamiento CPanel / WHM, shell_exec()se va a deshabilitar.
pspahn
*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default */5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=alwaysy estos comandos dan el error "comando no encontrado" por nupur walia
Amit Bera
Si obtiene ese error, debe verificar 3 cosas: 1) www-data es el usuario correcto en ese servidor que puede ejecutar este proceso, de lo contrario cámbielo a lo que sea el usuario. 2) verifique la ubicación de sh, entonces ejecute "which sh" y debería mostrar la ubicación, esto reemplazará "/ bin / sh" si es una ruta diferente. 3) finalmente verifique que la ruta a cron.sh sea correcta.
Shaughn
@AmitBera Recibí el mismo mensaje de error y no pude hacerlo funcionar con www-data, root o cualquier otro usuario. De hecho, simplemente omití al usuario y ahora funciona, así que*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Michael
@Shaughn, ¿puedes explicar cuál es el uso del modo predeterminado y siempre?
Rohan Hapani