如何在 Magento 2 中通过管理员动态设置 cron

How to setup cron dynamically via admin in Magento 2

如何在 Magento 2 的 config.xml(自定义模块)中动态设置 cron?

Magento2 有不同的方案来合并布局配置,因此您必须在 your_custom_module/etc 文件夹下创建一个名为 crontab.xml 的新文件。然后你可以像这样添加你的 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="YourVenDoerName\CustomModule\Cron\Test" method="execute">
            <schedule>* * * * *</schedule>
        </job>
    </group>
</config>

我会尝试提出一个建议,但不确定它是否完全回答了你的问题。

因此 config.xml 正在为您在 system.xml

中设置的配置字段设置默认值

所以您可以有另一个每分钟运行一次的 cron 作业 (* * * * *) 并动态更改 system.xml 中设置的值。像这样:

public function __construct(
    \Magento\Framework\App\Config\ConfigResource\ConfigInterface  $resourceConfig)
{
    $this->resourceConfig = $resourceConfig;
}        

public function execute()
{
    $newvalue = $dynamicvalue;

    $this->resourceConfig->saveConfig(
        'section/group/field', 
        $newvalue, 
        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT, 
        \Magento\Store\Model\Store::DEFAULT_STORE_ID
    );

}   

所以基本上是两个 cron 作业。 一种可以真正完成您想要的工作,另一种可以调整它的时间表。 您还可以根据需要使用上面的代码在观察者、插件或其他一些 class 中动态调整它的时间表。