カスタム cron ジョブの設定
このステップバイステップのチュートリアルでは、サンプルモジュールでカスタム cron ジョブとオプションで cron グループを作成する方法を説明します。 既に持っているモジュールを使用するか、magento2-samples
リポジトリからサンプルモジュールを使用できます。
cron ジョブを実行すると、cron_schedule
テーブルに行が追加され、その名前は cron ジョブ custom_cron
になります。
また、オプションで cron グループを作成する方法も示します。このグループを使用して、Commerce アプリケーションのデフォルト以外の設定でカスタム cron ジョブを実行できます。
このチュートリアルでは、以下を想定しています。
- Commerce アプリケーションは
/var/www/html/magento2
にインストールされています - Commerce データベースのユーザー名とパスワードの両方が
magento
です - すべてのアクションは ファイルシステムの所有者として実行します。
手順 1:サンプルモジュールの取得
カスタム cron ジョブを設定するには、サンプルモジュールが必要です。 magento-module-minimal
モジュールをお勧めします。
既にサンプルモジュールがある場合は、それを使用できます。この手順と次の手順をスキップし、手順 3:cron を実行するクラスの作成に進みます。
サンプルモジュールを取得するには:
-
ファイルシステムのオーナーとしてCommerce サーバーにログインするか、に切り替えます。
-
をCommerce アプリケーションのルートにないディレクトリ(ホームディレクトリなど)に移動します。
-
magento2-samples
リポジトリのクローンを作成ます。code language-bash git clone git@github.com:magento/magento2-samples.git
エラー
Permission denied (publickey).
が発生してコマンドが失敗した場合は、SSH 公開鍵を GitHub.com に追加する必要があります。 -
サンプルコードのコピー先となるディレクトリを作成します。
code language-bash mkdir -p /var/www/html/magento2/app/code/Magento/SampleMinimal
-
次のサンプルモジュールコードをコピーします。
code language-bash cp -r ~/magento2-samples/sample-module-minimal/* /var/www/html/magento2/app/code/Magento/SampleMinimal
-
正しくコピーされたファイルを確認します。
code language-bash ls -al /var/www/html/magento2/app/code/Magento/SampleMinimal
次の結果が表示されます。
code language-none drwxrwsr-x. 4 magento_user apache 4096 Oct 30 13:19 . drwxrwsr-x. 121 magento_user apache 4096 Oct 30 13:19 .. -rw-rw-r--. 1 magento_user apache 372 Oct 30 13:19 composer.json drwxrwsr-x. 2 magento_user apache 4096 Oct 30 13:19 etc -rw-rw-r--. 1 magento_user apache 10376 Oct 30 13:19 LICENSE_AFL.txt -rw-rw-r--. 1 magento_user apache 10364 Oct 30 13:19 LICENSE.txt -rw-rw-r--. 1 magento_user apache 1157 Oct 30 13:19 README.md -rw-rw-r--. 1 magento_user apache 270 Oct 30 13:19 registration.php drwxrwsr-x. 3 magento_user apache 4096 Oct 30 13:19 Test
-
Commerce データベースとスキーマを更新します。
code language-bash bin/magento setup:upgrade
-
キャッシュのクリーンアップ:
code language-bash bin/magento cache:clean
手順 2:サンプルモジュールを確認する
続行する前に、サンプルモジュールが登録され、有効になっていることを確認します。
-
次のコマンドを実行します。
code language-bash bin/magento module:status Magento_SampleMinimal
-
モジュールが有効になっていることを確認します。
code language-none Module is enabled
Module does not exist
を示している場合は、 手順 1 を慎重に確認します。 コードが正しいディレクトリにあることを確認します。 スペルと大文字と小文字の区別は重要です。何か異なる場合、モジュールは読み込まれません。 また、magento setup:upgrade
を実行することを忘れないでください。手順 3:cron を実行するクラスの作成
この手順では、cron ジョブを作成するための単純なクラスを示します。 クラスは、正常に設定されたことを確認する行のみを cron_schedule
テーブルに書き込みます。
クラスを作成するには:
-
クラスのディレクトリを作成し、そのディレクトリに変更します。
code language-bash mkdir /var/www/html/magento2/app/code/Magento/SampleMinimal/Cron && cd /var/www/html/magento2/app/code/Magento/SampleMinimal/Cron
-
次の内容を含む
Test.php
という名前のファイルをこのディレクトリに作成しました。code language-php <?php namespace Magento\SampleMinimal\Cron; use Psr\Log\LoggerInterface; class Test { protected $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } /** * Write to system.log * * @return void */ public function execute() { $this->logger->info('Cron Works'); } }
手順 4:crontab.xml
の作成
crontab.xml
ファイルは、カスタム cron コードを実行するスケジュールを設定します。
/var/www/html/magento2/app/code/Magento/SampleMinimal/etc
ディレクトリに、次のように crontab.xml
を作成します。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
<group id="default">
<job name="custom_cronjob" instance="Magento\SampleMinimal\Cron\Test" method="execute">
<schedule>* * * * *</schedule>
</job>
</group>
</config>
上記の crontab.xml
では、Magento/SampleMinimal/Cron/Test.php
クラスを 1 分ごとに実行するので、行が cron_schedule
テーブルに追加されます。
管理者が cron スケジュールを設定できるようにするには、システム設定フィールドの設定パスを使用します。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
<group id="default">
<job name="custom_cronjob" instance="Magento\SampleMinimal\Cron\Test" method="execute">
<config_path>system/config/path</config_path>
</job>
</group>
</config>
ここで、system/config/path
はモジュールの etc/adminhtml/system.xml
で定義されたシステム設定パスです。
手順 5:コンパイルとキャッシュのクリーンアップ
次のコマンドを使用してコードをコンパイルします。
bin/magento setup:di:compile
次のコマンドを使用してキャッシュをクリーンアップします。
bin/magento cache:clean
手順 6:cron ジョブの検証
この手順では、cron_schedule
データベーステーブルで SQL クエリを使用して、カスタム cron ジョブを正常に検証する方法を示します。
cron を検証するには:
-
Commerce cron ジョブを実行します。
code language-bash bin/magento cron:run
-
magento cron:run
コマンドを 2 回または 3 回入力します。コマンドを初めて入力すると、ジョブがキューに入れられ、その後、cron ジョブが実行されます。 コマンドを 少なくとも 2 回入力する必要があります。
-
次のように SQL クエリ
SELECT * from cron_schedule WHERE job_code like '%custom%'
を実行します。-
mysql -u magento -p
を入力 -
mysql>
プロンプトに対して、use magento;
と入力します。 -
SELECT * from cron_schedule WHERE job_code like '%custom%';
を入力結果は次のようになります。
code language-none +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+ | schedule_id | job_code | status | messages | created_at | scheduled_at | executed_at | finished_at | +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+ | 3670 | custom_cronjob | success | NULL | 2016-11-02 09:38:03 | 2016-11-02 09:38:00 | 2016-11-02 09:39:03 | 2016-11-02 09:39:03 | | 3715 | custom_cronjob | success | NULL | 2016-11-02 09:53:03 | 2016-11-02 09:53:00 | 2016-11-02 09:54:04 | 2016-11-02 09:54:04 | | 3758 | custom_cronjob | success | NULL | 2016-11-02 10:09:03 | 2016-11-02 10:09:00 | 2016-11-02 10:10:03 | 2016-11-02 10:10:03 | | 3797 | custom_cronjob | success | NULL | 2016-11-02 10:24:03 | 2016-11-02 10:24:00 | 2016-11-02 10:25:03 | 2016-11-02 10:25:03 | +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+
-
-
(オプション)メッセージがCommerce システムログに書き込まれていることを確認します。
code language-bash cat /var/www/html/magento2/var/log/system.log
次のようなエントリが 1 つ以上表示されます。
code language-none [2016-11-02 22:17:03] main.INFO: Cron Works [] []
これらのメッセージは、
Test.php
のexecute
メソッドから送信されます。code language-php public function execute() { $this->logger->info('Cron Works');
SQL コマンドとシステム ログにエントリが含まれていない場合は、magento cron:run
コマンドを数回実行して待機します。 データベースの更新には、ある程度の時間がかかる場合があります。
手順 7 (オプション):カスタム cron グループの設定
この手順では、カスタム cron グループをオプションで設定する方法を示します。 カスタム cron ジョブを他の cron ジョブとは異なるスケジュール(通常は 1 分に 1 回)で実行する場合や、複数のカスタム cron ジョブを異なる設定で実行する場合は、カスタム cron グループを設定する必要があります。
カスタム cron グループを設定するには:
-
crontab.xml
をテキストエディターで開きます。 -
<group id="default">
を<group id="custom_crongroup">
に変更 -
テキストエディターを終了します。
-
次の内容の
/var/www/html/magento2/app/code/Magento/SampleMinimal/etc/cron_groups.xml
を作成します。code language-xml <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/cron_groups.xsd"> <group id="custom_crongroup"> <schedule_generate_every>1</schedule_generate_every> <schedule_ahead_for>4</schedule_ahead_for> <schedule_lifetime>2</schedule_lifetime> <history_cleanup_every>10</history_cleanup_every> <history_success_lifetime>60</history_success_lifetime> <history_failure_lifetime>600</history_failure_lifetime> <use_separate_process>1</use_separate_process> </group> </config>
このオプションの意味については、Cron リファレンスのカスタマイズを参照してください。
手順 8:カスタム cron グループの検証
この オプション 手順では、管理者を使用してカスタム cron グループを検証する方法を示します。
カスタム cron グループを検証するには:
-
カスタムグループに対してCommerce cron ジョブを実行します。
code language-bash php /var/www/html/magento2/bin/magento cron:run --group="custom_crongroup"
コマンドを少なくとも 2 回実行します。
-
キャッシュのクリーンアップ:
code language-bash php /var/www/html/magento2/bin/magento cache:clean
-
管理者として管理者にログインします。
-
ストア/設定/設定/詳細/システム をクリックします。
-
右側のペインで Cron を展開します。
cron グループは次のように表示されます。