Qual script cron é melhor para executar? cron.php ou cron.sh

27

O Magento fornece dois scripts cron em seu diretório raiz, cron.php e cron.sh.

Qual é o melhor para executar e por quê?

Joe
fonte

Respostas:

31

Seria melhor executar o cron.sh

A partir do Magento EE 1.13.xe CE 1.8.x, a mecânica do cron mudou quando o Magento introduziu uma nova função no modo de agendamento.

Existem 2 modos disponíveis: 1. padrão - executa crons agendados. 2. always - como o nome indica, essas tarefas serão executadas incondicionalmente toda vez que o cron for acionado e não precisar de agendamentos explicitamente definidos.

Basicamente, o cron.php sendo chamado sem nenhum parâmetro usa shell_exec para executar dois processos do cron.sh. Cada um com um parâmetro diferente ("padrão" ou "sempre"). O Cron.sh, por sua vez, passa esse parâmetro de volta ao cron.php, que executa o cron. Internamente, o Magento usa sua infraestrutura de eventos para processar os dois modos, despachando eventos com os nomes “padrão” e “sempre”. Mage_Cron então implementa dois métodos de observação.

Olhando cron.php, você notará o uso da função PHP shell_exec. Além de ser uma preocupação de segurança, a função pode retornar NULL quando ocorrer um erro ou o programa não produzir saída. Não é possível detectar falhas de execução usando esta função. Isso significa que, em qualquer momento em que seu script / código falhe devido a um erro, acontece o seguinte: 1. O cronjob fica obsoleto, 2. Nenhum erro é registrado, 3. e ninguém sabe que isso aconteceu.

Para superar isso, os seguintes cronogramas devem ser adicionados:

*/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

Isso garantirá que os modos de processo sempre sejam executados sem o uso da função PHP de fallback shell_exec e que o cron não fique obsoleto, pois uma exceção será lançada se ocorrer um erro.

Shaughn
fonte
Just going to add that the sample cron expression above is pretty generic. www-data would change to whatever user runs web server processes. Also worth noting that for many CPanel/WHM hosting setups, shell_exec() is going to be disabled.
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=alwayse estes comandos dar "comando não encontrado" erro nupur Walia
Amit Bera
Se você receber esse erro, precisará verificar três coisas: 1) www-data é o usuário correto no servidor que pode executar esse processo; caso contrário, altere-o para qualquer que seja o usuário. 2) verifique a localização de sh, então execute "what sh" e ele deve gerar a localização, isso substituirá "/ bin / sh" se for um caminho diferente. 3) finalmente verifique se o caminho para o cron.sh está de fato correto.
Shaughn
@AmitBera Eu estava recebendo a mesma mensagem de erro e não conseguia fazê-la funcionar com www-data, root ou qualquer outro usuário. Na verdade, eu simplesmente omiti o usuário e agora ele funciona, então #*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Michael
@ Shaughn, você pode explicar o que é o uso do modo padrão e sempre?
Rohan Hapani 28/03