Shopware 6 计划任务未运行

Posted

技术标签:

【中文标题】Shopware 6 计划任务未运行【英文标题】:Shopware 6 scheduled task not running 【发布时间】:2020-10-07 08:10:39 【问题描述】:

我没有在我的模块中运行计划任务。我遵循了文档:

https://docs.shopware.com/en/shopware-platform-dev-en/how-to/scheduled-tasks

和:

https://docs.shopware.com/en/shopware-platform-dev-en/references-internals/core/module/tasks

但似乎该任务从未运行(我添加了日志记录以确保)。该任务显示在“scheduled_task”数据库表中,状态为“queued”,last_execution_time 为“NULL”。然而,看起来其他计划任务(如 delete_newsletter_recipient_task、requeue_dead_messages、product_export_generate_task、shopware.sitemap_generate 和 shopware.elasticsearch.create.alias)正在运行。此外,如果我手动运行“DownloadFeedTaskHandler”“运行”方法,代码将按预期工作。

我发现这个(德语)论坛帖子或多或少有相同的问题,但没有解决方案:

https://forum.shopware.com/discussion/67988/scheduled-task-hat-den-queued-status

我检查了 dead_messages 表,但它没有任何记录。

知道怎么走吗?

我的相关文件如下所示:

自定义/插件/AWSamplePlugin/src/Resources/config/services.xml:

<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="AW\SamplePlugin\ScheduledTask\DownloadFeedTask">
            <tag name="shopware.scheduled.task" />
        </service>
        <service id="AW\SamplePlugin\ScheduledTask\DownloadFeedTaskHandler">
            <argument type="service" id="scheduled_task.repository" />
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
            <argument type="service" id="logger" />
            <argument type="service" id="sales_channel.repository" />
            <tag name="messenger.message_handler" />
        </service>
    </services>
</container>

custom/plugins/AWSamplePlugin/src/ScheduledTask/DownloadFeedTask.php

<?php declare(strict_types=1);

namespace AW\SamplePlugin\ScheduledTask;

use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTask;

class DownloadFeedTask extends ScheduledTask

    public static function getTaskName(): string
    
        return 'aw.download_feed';
    

    public static function getDefaultInterval(): int
    
        return 60; // Every minute
    

custom/plugins/AWSamplePlugin/src/ScheduledTask/DownloadFeedTaskHandler.php:

<?php declare(strict_types=1);

namespace AW\SamplePlugin\ScheduledTask;

use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Psr\Log\LoggerInterface;

class DownloadFeedTaskHandler extends ScheduledTaskHandler

    protected $systemConfigService;
    protected $logger;
    protected $salesChannelRepository;

    public function __construct(
        EntityRepositoryInterface $scheduledTaskRepository,
        SystemConfigService $systemConfigService,
        LoggerInterface $logger,
        EntityRepositoryInterface $salesChannelRepository
    ) 
        $logger->info('__construct');
        parent::__construct($scheduledTaskRepository);
        $this->systemConfigService = $systemConfigService;
        $this->logger = $logger;
        $this->salesChannelRepository = $salesChannelRepository;
        $logger->info('__construct END');
    

    public static function getHandledMessages(): iterable
    
        return [ DownloadFeedTask::class ];
    

    public function run(): void
    
        $this->logger->info('RUNNING!');
        echo "ScheduledTask run";
    

【问题讨论】:

【参考方案1】:

当 ScheduledTask 卡在排队状态时,很可能该任务生成的消息没有得到处理。

要使用bin/console messenger:consume 使用消息,您可以使用-vv 标志来查看得到处理的消息。

有关如何使用消息的更多信息,请参阅docs article。

这是必要的,因为bin/console scheduled-task:run 命令只会检查哪些计划任务需要运行并负责调度,但为了实际运行这些任务,该命令会将消息发送到消息队列,然后任务会得到当您从队列中消费这些消息时执行。

【讨论】:

以上是关于Shopware 6 计划任务未运行的主要内容,如果未能解决你的问题,请参考以下文章

AutoIt 脚本可以在未登录时作为计划任务运行吗?

如何解决 Windows 计划任务未运行的问题?

任务计划程序 - 在运行未登录的任务时访问非本地驱动器

使用任务计划程序自动化 Rscripts; R脚本未运行

windows2008定时计划任务未执行成功,报:因为用户未登陆到网络,因此未执行所有操作是啥原因导致?求助

Confluence 6 计划任务