Magento udostępnia dwa skrypty cron w swoim katalogu głównym, cron.php i cron.sh.
Który z nich jest lepszy i dlaczego?
Najlepiej byłoby uruchomić cron.sh
Począwszy od Magento EE 1.13.x i CE 1.8.x, mechanika cron uległa zmianie, gdy Magento wprowadziło nową funkcję trybu planowania.
Dostępne są 2 tryby: 1. domyślny - uruchamia zaplanowane crons. 2. zawsze - jak sama nazwa wskazuje, zadania te będą bezwarunkowo wykonywane za każdym razem, gdy uruchamiany jest cron i nie potrzebują wyraźnie zdefiniowanych harmonogramów.
Zasadniczo wywołanie cron.php bez żadnych parametrów używa shell_exec do wykonania dwóch procesów cron.sh. Każdy z innym parametrem („domyślny” lub „zawsze”). Cron.sh z kolei przekazuje ten parametr z powrotem do cron.php, który następnie wykonuje cron. Wewnętrznie Magento wykorzystuje swoją infrastrukturę zdarzeń do przetwarzania dwóch trybów poprzez wysyłanie zdarzeń o nazwach „default” i „always”. Mage_Cron następnie implementuje dwie metody obserwatora.
Patrząc na cron.php, zauważysz użycie funkcji PHP shell_exec. Oprócz obaw związanych z bezpieczeństwem, funkcja może zwrócić NULL zarówno wtedy, gdy wystąpi błąd lub program nie generuje danych wyjściowych. Za pomocą tej funkcji nie można wykryć błędów wykonania. Oznacza to, że w dowolnym momencie, w którym skrypt / kod zawiedzie z powodu błędu, dzieje się, co następuje: 1. Praca z cronjob staje się nieaktualna, 2. Błąd nie jest rejestrowany, 3. i nikt nie wie, że coś takiego się wydarzyło.
Aby temu zaradzić, należy dodać następujące działania typu 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
Zapewni to, że tryby procesu będą zawsze działały bez użycia awaryjnej funkcji PHP shell_exec i że cron nie powinien stać się nieaktualny, ponieważ wyjątek jest zgłaszany, jeśli wystąpi błąd.
www-data
zmieniłby się na cokolwiek użytkownik uruchamia procesy serwera WWW. Warto również zauważyć, że w przypadku wielu konfiguracji hostingu CPanel / WHMshell_exec()
zostanie on wyłączony.*/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
i te polecenia powodują błąd „polecenie nie znaleziono” autorstwa nupur walia*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default