Magento 2で特定の時間にcronジョブを実行するにはどうすればよいですか?
Aug 20 2020
無効になっている製品価格を更新し、cronが1日に1回特定の時間に実行されるcronジョブを作成したいと思います。
からの参照を取得してカスタム基本モジュールを作成しました https://www.mageplaza.com/devdocs/magento-2-create-cron-job/
私のcrontab.xml(パス:app / code / Product / Cron / 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 instance="Product\Cron\Cron\Test" method="execute" name="mageplaza_helloworld_cron">
<schedule>*/1 * * * *</schedule>
</job>
</group>
</config>
私のtest.phpは
<?php
namespace Cron\Run\Cron; (path : app/code/Product/Cron/Cron/Test.php )
class Test
{
public function execute()
{
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/cron.log'); $logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info(__METHOD__); return $this;
}
}
しかし、cron.logファイルにメッセージが表示されません。私が助けを欠いているものはありがたいです。
回答
1 Msquare Aug 20 2020 at 12:53
このファイルをカスタムモジュールに追加し、最初にモジュールが有効になっているかどうかを確認します。モジュールが有効になっている必要があります。
cronを実行するクラスを作成します
app / code / VendoreName / ModuleName / Cron
Test.php
<?php
namespace VendoreName\ModuleName\Cron;
use Psr\Log\LoggerInterface;
class Test {
protected $logger; public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
public function execute() {
$this->logger->info('Cron Works');
}
}
crontab.xmlを作成します
app / code / VendoreName / ModuleName / 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="VendoreName\ModuleName\Cron\Test" method="execute">
<schedule>* * * * *</schedule>
</job>
</group>
</config>
コンパイルしてキャッシュをクリーンアップ
bin/magento s:up
bin/magento setup:di:compile
bin/magento cache:clean
cronジョブを確認します
この手順では、cron_scheduleデータベーステーブルでSQLクエリを使用してカスタムcronジョブを正常に検証する方法を示します。
- Magentoのcronジョブを実行します。
bin/magento cron:run
- magento cron:runコマンドを2〜3回入力します。
コマンドを初めて入力すると、ジョブがキューに入れられます。その後、cronジョブが実行されます。コマンドは少なくとも2回入力する必要があります。
- '%custom%'のようなcron_schedule WHEREjob_codeからSQLクエリSELECT *を実行します
- メッセージがMagentoのシステムログに書き込まれていることを確認します。
var/www/html/magento_root/var/log/system.log
詳細はこちら
これがお役に立てば幸いです。