El título lo resume más o menos. ¿Hay alguna diferencia entre el archivo de shell y el archivo php para el cron de Magento?
Si hay una diferencia, ¿hay alguna razón para ejecutar una en lugar de la otra?
magento-1.9
cron
Chris Morris
fuente
fuente

Respuestas:
El cron.sh apunta al archivo cron.php, por lo que debería apuntar su tarea cronjob al archivo .sh.
Básicamente, dentro del archivo PHP reside toda la lógica para que el cron recupere trabajos de Magento y el archivo sh invoca el archivo PHP.
fuente
cron.sharchivo está configurado para verificar que no haya un proceso cron ejecutándose en Magento antes de comenzar uno nuevo. Úselo siempre como disparador. Bajo ciertos esquemas de seguridad con WHM / cPanel, es posible que no se le permita ejecutar scripts de shell como trabajos cron y solo entonces se ejecuta directamentecron.phpdesde crontab.shell_execdeshabilitado en WHM / cPanel, pero eso no significa que se informe como deshabilitado cuando secron.phpverificaini_get('disable_functions'). Entonces cron intenta ejecutarse, veshell_execque no está deshabilitado, intenta usarlo y falla porque está deshabilitado. encogimiento de hombrosDeberías estar usando
cron.sh, es decirDependiendo de su entorno, se
cron.shejecutacron.phpqué se ejecutacron.shqué se ejecutacron.php. Está diseñado para evitar que el cron de Magento ejecute trabajos varias veces o genere demasiados procesos que se superponen.La primera vez que se ejecute,
cron.shverificará los procesos actuales en ejecución para ver sicron.phpya se está ejecutando (sin ningún argumento). Si no, se ejecutaráEn
cron.phpla primera ejecución (y dependiendo de si su sistema operativo / host lo admite) se generarácron.shnuevamente , dos veces, pero esta vez pasando argumentos:De nuevo
cron.shpor segunda vez, volverá a verificar si cron se está ejecutando con los parámetros especificados. De lo contrario, lo pasará de nuevocron.phpcondefaultoalways.Y
cron.phppor última vez, activará a Magento para ejecutardefaulttrabajos cron (casi todos), así comoalwaystrabajos cron (comoenterprise_refresh_index). Al separarlos en dos procesos, reduce el riesgo de que un trabajo de larga duración bloquee a otros.fuente
cron.sh
Use
/bin/shpara procesar este scriptEstablezca una constante
CRONSCRIPTcon el archivo para llamar. $ 1 es el primer argumento, comocron.sh /whatever/path/cron.phpestablezca otra constante, aquí puede pasar
alwaysodefaultexplícitamente.cron no tiene ninguna variable de entorno, por lo tanto, no puede simplemente llamar
php.whichle dice dónde vive el binario php, muy probablemente en/bin/php$0es el archivo en sí, como__FILE__en phpNo estoy seguro exactamente cómo funciona esto, pero qué hace: llamar
cron.phpconphp.cron.php
Como ya se dijo, cron no tiene un directorio de trabajo ni ninguna otra variable de entorno, por lo tanto, el directorio de trabajo está configurado.
Si llamas a cron.php por curl o algo así, ¿los nombres de los archivos son fijos?
Establezca umask, que define con qué permisos se crean los nuevos archivos: cero permisos, nadie tiene permitido hacer nada.
Asegúrese de que se permiten todas las funciones que se necesitan.
conjunto
$cronmodesi cronmode no está configurado, llamamos
cron.shcon ambos modosY entonces magento finalmente está haciendo su trabajo:
cargar observadores de eventos y agregarlos al grupo de observadores
si
shell_execestá deshabilitado, despacha eventos,\Aoe_Scheduler_Model_Observer::dispatchAlwaysy\Mage_Cron_Model_Observer::dispatchejecuta las tareas cron.fuente