TYPO3 调度程序任务 - 奇怪的行为

Posted

技术标签:

【中文标题】TYPO3 调度程序任务 - 奇怪的行为【英文标题】:TYPO3 scheduler task - strange behavior 【发布时间】:2018-06-12 08:32:39 【问题描述】:

我正在使用 TYPO3 6.2,并使用 Extbase 和 Fluid 创建了一个自定义扩展。 我做了一个自定义任务,以便在 TYPO3 调度程序模块中每小时执行一次。下面是它的样子:

<?php

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Backend\Utility\BackendUtility;

class ImportCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController 

    public function importCommand() 

    // some code

    



?>

它似乎工作正常,但行为很奇怪:

如果我手动执行任务:它工作正常 如果我让调度程序每小时运行一次任务:它不起作用,任务卡住,24 小时后,我在日志中收到一条错误消息:

[调度程序]:删除记录的执行,假设进程是 死的。 'TYPO3\CMS\Extbase\Scheduler\Task' (UID: 5) 的执行是 开始于 2018-06-10 16:40:00

然后,我必须自己在调度程序中停止任务。根据documentation,类内的方法不需要返回真或假。那么,为什么调度程序启动时任务不成功?

【问题讨论】:

你是否使用过 CRON 作业? 【参考方案1】:

我做了一个这样的调度任务

<?php
namespace Vendor\Extensionname\Task;

/***************************************************************
 *  Copyright notice
 *
 *  All rights reserved
 *
 *  ...
 *
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/


/**
 * My scheduler task
 *
 */
class MyTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask  


    /**
     * Execute, called by scheduler.
     *
     * @return bool TRUE if task run was successful
     */
    public function execute() 

        \TYPO3\CMS\Core\Utility\GeneralUtility::devLog(
            '[Vendor\\Extensionname\\Task\\MyTask]: Task run sucessfully', 'scheduler', 2);
        
        return true;
    



【讨论】:

感谢您的回答。我做了这个,但结果是一样的:如果我手动执行它可以工作,如果它设置为自动它永远不会工作。顺便说一句,我尝试在我的任务中使用一个简单的 mail() 函数。【参考方案2】:

调度器任务启动方式有一些区别:

由 cron 计划: 它是 CLI PHP,它可能是另一个版本,至少是由网络服务器启动的 PHP 之外的另一个配置(例如,没有时间限制!),在 TYPO3 中它使用特殊的 cli-user 执行。

在 BE 中开始: 这是在网络服务器上下文中启动的:(通常)您有时间限制,当前 TYPO3-BE 用户执行任务。

【讨论】:

你好 Bernd,谢谢,但这并没有给我任何关于我的问题的线索 你需要比较PHP版本和它的配置。尝试一个简单的任务,例如将 php-info 写入文件,然后比较每次调用的文件。 都是5.6.30 你比较过配置吗?尝试将 phpinfo 的信息保存到文件中并进行比较。 看来问题不是因为PHP版本之间的差异,而是因为命令永远不会返回true或false。 Heinz Schilling 的回答完美。

以上是关于TYPO3 调度程序任务 - 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

.Net 任务调度程序行为

如何使用 Messagebox 在 Windows 7 任务调度程序中启动 VBS 脚本?

第4章 进程调度

Zend 框架中可以手动调度吗?

奇怪的预言机工作行为

《分布式_Job》——定时XXL_JOB_使用总结