Quale cron script è meglio eseguire? cron.php o cron.sh


27

Magento fornisce due script cron nella sua directory principale, cron.php e cron.sh.

Qual è il migliore da eseguire e perché?

Risposte:


31

Sarebbe meglio eseguire cron.sh

A partire da Magento EE 1.13.xe CE 1.8.x, la meccanica cron è cambiata in cui Magento ha introdotto una nuova funzione della modalità di pianificazione.

Sono disponibili 2 modalità: 1. impostazione predefinita: esegue i croni programmati. 2. sempre - Come dice il nome, queste attività verranno eseguite incondizionatamente ogni volta che cron viene attivato e non necessitano di pianificazioni esplicitamente definite.

Fondamentalmente cron.php chiamato senza parametri utilizza shell_exec per eseguire due processi di cron.sh. Ognuno con un parametro diverso ("predefinito" o "sempre"). Cron.sh a sua volta restituisce questo parametro a cron.php che quindi esegue cron. Internamente Magento utilizza la sua infrastruttura di eventi per elaborare le due modalità inviando eventi con i nomi "default" e "sempre". Mage_Cron implementa quindi due metodi di osservazione.

Guardando cron.php, noterai l'uso della funzione PHP shell_exec. Oltre ad essere un problema di sicurezza, la funzione può restituire NULL sia quando si verifica un errore che il programma non produce alcun output. Non è possibile rilevare errori di esecuzione utilizzando questa funzione. Ciò significa che in qualsiasi dato momento in cui lo script / codice non riesce a causa di un errore, si verifica quanto segue: 1. Il cronjob diventa stantio, 2. Non viene registrato alcun errore, 3. e nessuno sa che tutto ciò è accaduto.

Per ovviare a questo, dovrebbero essere aggiunti i seguenti 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

Questo assicurerà che le modalità di processo funzioneranno sempre senza usare la funzione fallback PHP shell_exec e che il cron non debba diventare obsoleto poiché viene generata un'eccezione se si verifica un errore.


Aggiungo solo che l'espressione cron di esempio sopra è piuttosto generica. www-datacambierebbe a qualunque utente esegua i processi del server web. Vale anche la pena notare che per molte configurazioni di hosting CPanel / WHM, shell_exec()verrà disabilitato.
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 questi comandi danno l'errore "comando non trovato" di nupur walia
Amit Bera

Se ricevi questo errore, devi controllare 3 cose: 1) www-data è l'utente corretto su quel server che può eseguire questo processo, altrimenti cambiarlo in qualunque utente sia. 2) controlla la posizione di sh, quindi esegui "quale sh" e dovrebbe emettere la posizione, questo sostituirà "/ bin / sh" se è un percorso diverso. 3) infine controlla che il percorso di cron.sh sia effettivamente corretto.
Shaughn,

@AmitBera Stavo ricevendo lo stesso messaggio di errore e non riuscivo a farlo funzionare con www-data, root o altri utenti. In realtà ho appena omesso l'utente e ora funziona, quindi*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Michael,

@Shaughn puoi spiegare a cosa serve la modalità predefinita e sempre?
Rohan Hapani,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.