后台的计划任务进程在任何大型系统中都很重要。清除缓存和索引最新可以保持系统健康运行,而某些流程只需要及时操作,以避免高系统负载,内存泄漏或某些服务过载(发送大量电子邮件)。为这些过程和应该不时重复的过程设置一个cron计划任务总是一个好办法。在这篇博文中,我们将描述如何将代码的某一部分设置为Magento 2中的cron计划任务。
让我们创建文件,其中包含我们需要执行的代码。它可以随心所欲地调用,并放置在您的扩展中的任何位置。但如果将它放在扩展程序的“Cron”目录中,它看起来会更整洁。它应该如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php /** * path: * magento2_location/app/code/Vendorname/Extensionname/Cron/MyCronTask.php */ namespace Vendorname\Extensionname\Cron; class MyCronTask { public function execute() { /** * Do some cool stuff here */ return $this; } } |
建议使用一个单独的类,并将您的逻辑放在与Magento2控制器相似的execute()方法中 – 每个cron文件是一个动作。
接下来,我们需要添加一个配置文件,让Magento2知道在哪里调用cron任务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0"?> <!-- /** * path: * magento2_location/app/code/Vendorname/Extensionname/etc/crontab.xml */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="custom_group_name"> <job name="my_cronjob_name" instance="Vendorname\Extensionname\Cron\MyCronTask" method="execute"> <schedule>* * * * *</schedule> </job> </group> </config> |
我们检查crontab.xml参数。计划任务有3个参数:
- name – cronjob的唯一标识符。将在magento安装的“cron_schedule”数据库表中显示为“job_code”;
- instance – 应该实例化的类;
- method – 应该调用的类实例的方法。
“schedule”节点有一个cron表达式,它指定我们的cron作业应该被安排的时间。我们的示例表达式声明应该随时调用它。
节点“组”指定我们的cronjob应该属于的cron任务组。如果我们需要一个自定义组,我们也需要指定它。Magento 2只有框中的“默认”和“索引”组。为了创建我们自己的组,我们需要用另一个配置文件声明它。它被称为cron_groups.xml,应具有以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0"?> <!-- /** * path: * magento2_location/app/code/Vendorname/Extensionname/etc/cron_groups.xml */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/cron_groups.xsd"> <group id="custom_group_name"> <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> |
为cronjobs创建单独的组允许您指定任务计划的时间段并保持cronjobs执行历史记录。cron_groups.xml中指定的参数被设置为该组的默认值,可以从“Stores > Configuration > Advanced > System > Cron (Scheduled Tasks) – 所有时间都以分钟为单位”。如果您检查管理面板,您应该看到新的cron作业组:
最后,您可以尝试通过magento根目录中的bash shell手动安排和运行cronjobs,并仅针对自定义cronjobs组:
1 | bin / magento cron:run - group = “custom_group_name” |
就这样。我希望这篇文章很有用,可以节省你一些时间。谢谢阅读!