カスタム cron ジョブの設定
このステップバイステップのチュートリアルでは、サンプルモジュールでカスタム cron ジョブとオプションでcron グループを作成する方法を説明します。 既に持っているモジュールを使用するか、magento2-samples リポジトリ のサンプルモジュールを使用できます。
cron ジョブを実行すると、cron ジョブの名前custom_cronを持つ行がcron_schedule テーブルに追加されます。
また、オプションでcron グループを作成する方法も示します。このグループを使用すると、Commerce アプリケーションのデフォルト以外の設定でカスタム cron ジョブを実行できます。
このチュートリアルでは、次の要素を想定しています。
- Commerce アプリケーションが
/var/www/html/magento2にインストールされています - Commerce データベースのユーザー名とパスワードは両方
magentoです - すべてのアクションは、 ファイルシステム所有者として実行します
手順1:サンプルモジュールを入手する
カスタム cron ジョブを設定するには、サンプルモジュールが必要です。 magento-module-minimal モジュールをお勧めします。
既にサンプルモジュールがある場合は、それを使用できます。この手順と次の手順をスキップして、「手順3:cronを実行するクラスの作成」に進みます。
サンプルモジュールを取得するには:
-
ファイルシステム所有者としてCommerce サーバーにログインするか、切り替えます。
-
Commerce アプリケーションルート以外のディレクトリ(ホームディレクトリなど)に移動します。
-
magento2-samplesリポジトリ を複製します。code language-shell git clone git@github.com:magento/magento2-samples.gitエラー
Permission denied (publickey).でコマンドが失敗した場合は、SSH公開鍵をGitHub.comに追加する必要があります。 -
サンプルコードをコピーするディレクトリを作成します。
code language-shell mkdir -p /var/www/html/magento2/app/code/Magento/SampleMinimal -
サンプル モジュール コードをコピーします。
code language-shell cp -r ~/magento2-samples/sample-module-minimal/* /var/www/html/magento2/app/code/Magento/SampleMinimal -
ファイルが正しくコピーされていることを確認します。
code language-shell ls -al /var/www/html/magento2/app/code/Magento/SampleMinimal次の結果が表示されます。
code language-text 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-shell bin/magento setup:upgrade -
キャッシュをクリーニングします。
code language-shell bin/magento cache:clean
手順2:サンプルモジュールの確認
続行する前に、サンプルモジュールが登録され、有効になっていることを確認します。
-
次のコマンドを実行します。
code language-shell bin/magento module:status Magento_SampleMinimal -
モジュールが有効になっていることを確認します。
code language-text Module is enabled
Module does not existを示している場合は、手順1を慎重に確認してください。 コードが正しいディレクトリにあることを確認します。 スペルと大文字と小文字が重要です。何か異なる場合は、モジュールは読み込まれません。 また、magento setup:upgradeを実行することを忘れないでください。手順3: cronを実行するクラスを作成する
この手順では、cron ジョブを作成する簡単なクラスを示します。 クラスは、正常に設定されていることを確認する行をcron_schedule テーブルにのみ書き込みます。
クラスを作成するには:
-
クラスのディレクトリを作成し、そのディレクトリに変更します。
code language-shell 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 コードを実行するスケジュールを設定します。
crontab.xmlを/var/www/html/magento2/app/code/Magento/SampleMinimal/etc ディレクトリに次のように作成します。
<?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では、1分に1回Magento/SampleMinimal/Cron/Test.php クラスが実行され、その結果、行が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-shell 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-text +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+ | 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-shell cat /var/www/html/magento2/var/log/system.log次のような1つ以上のエントリが表示されます。
code language-text [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>
オプションの意味については、crons リファレンスのカスタマイズ を参照してください。
手順8:カスタム cron グループの確認
この オプション 手順では、管理者を使用してカスタム cron グループを検証する方法を示します。
カスタム cron グループを確認するには:
-
カスタムグループのCommerce cron ジョブを実行します。
code language-shell php /var/www/html/magento2/bin/magento cron:run --group="custom_crongroup"コマンドを少なくとも2回実行します。
-
キャッシュをクリーニングします。
code language-shell php /var/www/html/magento2/bin/magento cache:clean -
管理者としてAdminにログインします。
-
Stores > Settings > Configuration > Advanced > Systemをクリックします。
-
右側のウィンドウで、Cronを展開します。
cron グループは次のように表示されます。