Der Titel bringt es auf den Punkt. Gibt es einen Unterschied zwischen der Shell-Datei und der PHP-Datei für den Magento-Cron?
Wenn es einen Unterschied gibt, gibt es einen Grund, einen anstelle des anderen auszuführen?
magento-1.9
cron
Chris Morris
quelle
quelle
Antworten:
Die Datei cron.sh verweist auf die Datei cron.php, daher sollten Sie Ihre Cronjob-Aufgabe auf die Datei .sh verweisen.
Grundsätzlich befindet sich in der PHP-Datei die gesamte Logik, die der Cron benötigt, um Jobs von Magento abzurufen, und die SH-Datei ruft die PHP-Datei auf.
quelle
cron.sh
Datei ist so eingerichtet, dass geprüft wird, ob in Magento kein Cron-Prozess ausgeführt wird, bevor ein neuer gestartet wird. Verwenden Sie es immer als Auslöser. Unter bestimmten Sicherheitsschemata mit WHM / cPanel dürfen Sie möglicherweise keine Shell-Skripte als Cron-Jobs ausführen und nur dann direktcron.php
von Crontab aus.shell_exec
WHM / cPanel deaktiviert. Dies bedeutet jedoch nicht, dass es beicron.php
Überprüfungen als deaktiviert gemeldet wirdini_get('disable_functions')
. Cron versucht also auszuführen, wirdshell_exec
als nicht deaktiviert angesehen, versucht es zu verwenden und schlägt fehl, weil es deaktiviert ist. AchselzuckenSie sollten verwenden
cron.sh
, dhJe nach Umgebung,
cron.sh
läuftcron.php
welche Läufecron.sh
der Läufecron.php
. Es wurde entwickelt, um zu verhindern, dass Magentos Cron Jobs mehrmals ausführt oder zu viele überlappende Prozesse erzeugt.Bei der ersten Ausführung
cron.sh
werden die derzeit ausgeführten Prozesse überprüft, um festzustellen, ob siecron.php
bereits ausgeführt werden (ohne Argumente). Wenn nicht, wird es ausgeführtBeim
cron.php
ersten Start (und abhängig davon, ob Ihr Betriebssystem / Host dies unterstützt) wird es zweimalcron.sh
erneut erzeugt , diesmal jedoch mit Argumenten:Beim
cron.sh
zweiten Mal wird erneut geprüft, ob cron mit den angegebenen Parametern ausgeführt wird. Wenn nicht, wird escron.php
mitdefault
oder zurückgegebenalways
.Und
cron.php
beim letzten Mal wird Magento dazu veranlasst,default
Cron-Jobs (fast alle) sowiealways
Cron-Jobs (wieenterprise_refresh_index
) auszuführen . Durch die Aufteilung in zwei Prozesse wird das Risiko verringert, dass ein Auftrag mit langer Laufzeit andere blockiert.quelle
cron.sh
Verwenden Sie
/bin/sh
diese Option , um dieses Skript zu verarbeitenLegen Sie eine Konstante
CRONSCRIPT
für die aufzurufende Datei fest. $ 1 ist das erste Argument, wiecron.sh /whatever/path/cron.php
setze eine andere Konstante, hier kannst du übergeben
always
oderdefault
explizit.cron hat keine Umgebungsvariablen, daher können Sie nicht einfach aufrufen
php
.which
sagt dir, wo die PHP-Binärdatei lebt, höchstwahrscheinlich in/bin/php
$0
ist die datei selbst, wie__FILE__
in phpNicht ganz sicher, wie das funktioniert, aber was sie tut: Anruf
cron.php
mitphp
.cron.php
Wie bereits gesagt, hat cron kein Arbeitsverzeichnis oder eine andere Umgebungsvariable, daher ist das Arbeitsverzeichnis festgelegt.
Wenn du cron.php per curl oder so aufrufst, sind die Dateinamen fest?
Setze umask, mit der festgelegt wird, mit welchen Berechtigungen neue Dateien erstellt werden - keine Berechtigungen, niemand darf etwas tun.
Stellen Sie sicher, dass alle Funktionen erlaubt sind, die benötigt werden.
einstellen
$cronmode
wenn cronmode nicht gesetzt ist, rufen wir
cron.sh
mit beiden modi aufUnd dann macht Magento endlich seine Arbeit:
Laden Sie Ereignisbeobachter und fügen Sie sie dem Beobachterpool hinzu
Wenn
shell_exec
deaktiviert, werden Ereignisse ausgelöst\Aoe_Scheduler_Model_Observer::dispatchAlways
und\Mage_Cron_Model_Observer::dispatch
die Cron-Tasks ausgeführt.quelle