どのcronスクリプトを実行するのが最適ですか?cron.phpまたはcron.sh


27

Magentoのルートディレクトリには、cron.phpとcron.shの2つのcronスクリプトがあります。

実行する方が良いのはなぜですか?

回答:


31

cron.shを実行することをお勧めします

Magento EE 1.13.xおよびCE 1.8.xの時点で、Magentoが新しいスケジューリングモード機能を導入したところで、cronの仕組みが変更されました。

2つの使用可能なモードがあります。1.デフォルト-スケジュールされたcronを実行します。2. always-名前が示すように、これらのタスクはcronがトリガーされるたびに無条件に実行され、明示的に定義されたスケジュールを必要としません。

基本的に、パラメーターなしで呼び出されるcron.phpは、shell_execを使用してcron.shの2つのプロセスを実行します。それぞれに異なるパラメーター(「デフォルト」または「常に」)があります。Cron.shはこのパラメーターをcron.phpに渡し、cron.phpはcronを実行します。内部的には、Magentoはイベントインフラストラクチャを使用して、「default」および「always」という名前のイベントをディスパッチすることで2つのモードを処理します。Mage_Cronは、2つのオブザーバーメソッドを実装します。

cron.phpを見ると、PHP関数shell_execの使用に気づくでしょう。セキュリティ上の懸念とは別に、関数はエラーが発生したとき、またはプログラムが出力を生成しないときの両方でNULLを返すことができます。この関数を使用して実行エラーを検出することはできません。これは、エラーのためにスクリプト/コードが失敗する任意の時点で、次のことが起こることを意味します。1. cronjobが古くなる、2。エラーが記録されない、3。これが発生したことを誰も知らない。

これを克服するには、次の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

これにより、フォールバックPHP関数shell_execを使用せずにプロセスモードが常に実行され、エラーが発生した場合に例外がスローされるため、cronが古くなることはありません。


上記のサンプルcron式は非常に一般的であることを付け加えます。www-dataユーザーがWebサーバープロセスを実行するものに変更されます。また、多くのCPanel / WHMホスティング設定でshell_exec()は、無効化されることに注意する価値があります。
-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=alwaysまた、これらのコマンドは、nupur waliaによる「コマンドが見つかりません」というエラーを表示します
Amit Bera

このエラーが発生した場合は、次の3つのことを確認する必要があります。1)www-dataは、このプロセスを実行できるサーバー上の正しいユーザーです。それ以外の場合は、ユーザーを変更します。2)shの場所を確認し、「which sh」を実行すると場所が出力されます。パスが異なる場合、「/ bin / sh」が置き換えられます。3)最後に、cron.shへのパスが実際に正しいことを確認します。
ショーン

@AmitBera私は同じエラーメッセージを受け取っていましたが、www-data、root、または他のユーザーで動作させることができませんでした。そう、私は実際には、ユーザーを省略し、それが動作するようになりました*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
マイケル・

@Shaughnは、デフォルトモードと常時モードの使用について説明できますか?
ローハンハパニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.