Tytuł podsumowuje. Czy istnieje różnica między plikiem powłoki a plikiem php dla cron Magento?
Jeśli istnieje różnica, czy istnieje powód, aby uruchomić jeden zamiast drugiego?
magento-1.9
cron
Chris Morris
źródło
źródło
Odpowiedzi:
Plik cron.sh wskazuje na plik cron.php, więc powinieneś wskazać swoje zadanie cronjob na plik .sh.
Zasadniczo wewnątrz pliku PHP znajduje się cała logika crona do pobierania zadań z Magento, a plik sh wywołuje plik PHP.
źródło
cron.sh
Plik jest skonfigurowana, aby sprawdzić, że nie jest to proces cron działa w Magento przed rozpoczęciem nowego. Zawsze używaj go jako wyzwalacza. W ramach niektórych schematów bezpieczeństwa z WHM / cPanel, możesz nie mieć możliwości uruchamiania skryptów powłoki jako zadań cron, a dopiero potem bezpośrednio uruchamiasz sięcron.php
z crontab.shell_exec
wyłączony w WHM / cPanel, ale to nie znaczy, że jest zgłaszany jako wyłączony podczascron.php
kontroliini_get('disable_functions')
. Więc cron próbuje uruchomić, widzishell_exec
jako nie wyłączony, próbuje go użyć i kończy się niepowodzeniem, ponieważ jest wyłączony. wzruszenie ramionamiPowinieneś używać
cron.sh
, tjW zależności od środowiska
cron.sh
działa,cron.php
które działa,cron.sh
które działacron.php
. Został zaprojektowany tak, aby cron Magento nie wykonywał zadań wiele razy lub nie powodował zbyt wielu procesów, które się nakładają.Przy pierwszym uruchomieniu
cron.sh
sprawdzi bieżące uruchomione procesy, aby sprawdzić, czycron.php
jest już uruchomiony (bez żadnych argumentów). Jeśli nie, wykona sięPrzy
cron.php
pierwszym uruchomieniu (i w zależności od tego, czy system operacyjny / host go obsługuje), odrodzi sięcron.sh
ponownie , dwa razy, ale tym razem przekazując argumenty:Z powrotem
cron.sh
po raz drugi sprawdzi ponownie, czy cron działa z określonymi parametrami. Jeśli nie, to minie go z powrotem docron.php
albo zdefault
alboalways
.I
cron.php
po raz ostatni, uruchomi Magento do uruchamianiadefault
zadań cron (prawie wszystkie), a takżealways
zadań cron (jakenterprise_refresh_index
). Dzieląc je na dwa procesy, zmniejsza ono ryzyko długotrwałego zadania przed blokowaniem innych.źródło
cron.sh
Służy
/bin/sh
do przetwarzania tego skryptuUstaw stałą
CRONSCRIPT
z plikiem do wywołania. 1 $ to pierwszy argumentcron.sh /whatever/path/cron.php
ustaw kolejną stałą, tutaj możesz przekazać
always
lubdefault
jawnie.cron nie ma żadnych zmiennych środowiskowych, dlatego nie można po prostu wywoływać
php
.which
mówi ci, gdzie mieszka binarny php, najprawdopodobniej w/bin/php
$0
to sam plik, jak__FILE__
w phpNie wiem dokładnie, jak to działa, ale co to robi: zadzwoń
cron.php
zphp
.cron.php
Jak już powiedziano, cron nie ma działającego katalogu ani żadnej innej zmiennej środowiskowej, dlatego ustawiony jest działający katalog.
Jeśli wywołasz cron.php przez curl lub coś, nazwy plików są ustalone?
Ustaw umask, który określa, z jakimi uprawnieniami tworzone są nowe pliki - zero uprawnień, nikt nie może nic robić.
Upewnij się, że wszystkie funkcje są dozwolone, które są potrzebne.
zestaw
$cronmode
jeśli cronmode nie jest ustawiony, wywołujemy
cron.sh
oba trybyA potem magento wreszcie wykonuje swoją pracę:
wczytaj obserwatorów zdarzeń i dodaj ich do puli obserwatorów
jeśli
shell_exec
jest wyłączone, wysyłaj zdarzenia, więc\Aoe_Scheduler_Model_Observer::dispatchAlways
i\Mage_Cron_Model_Observer::dispatch
uruchamiają zadania cron.źródło