TYPO3 调度程序什么都不做

TYPO3 Scheduler does nothing

我写了一个调度任务。它在我的机器上工作正常。不幸的是它不能在我的远程机器上工作。

该机器是带有 php7.0 php-fpm 运行 的 freeBSD。 cron 看起来像:

**MAILTO=mail@falk-roeder.de
@weekly /usr/local/bin/letsencrypt.sh -c
* * * * * php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler
#* * * * * php -r 'echo function_exists("foo") ? "yes" : "no";'

执行最后一个 crontab(如果我在其中注释)并将邮件输出发送给我。

如果我用一些奇怪的东西替换 "scheduler",我还会收到一封邮件,其中包含我应该选择的有效选项的输出。 所以这对我来说意味着 cron 是 运行 并且 cli_dispatch.phpsh 被正确调用。

在 TYPO3 后端,调度程序说配置没问题。我可以手动启动 cron 并完成工作。

那么,还有什么原因可以......?

编辑

我发现原因是 TYPO3 调度程序没有请求正确的数据库。我有一个 AdditionalConfiguration 文件,其中 $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] 中的数据库名称根据变量 $_SERVER['SERVER_NAME'] 更改。但是在 Scheduler 中这个变量是空的。所以我不得不删除 AdditionalConfiguration 文件,一切都按预期进行。

现在的问题是,如何实现Scheduler根据Servername获取正确的Database?

与其检查服务器变量,不如使用也可以在调用调度程序时设置的应用程序上下文

其他更完整的答案:

在 .htaccess 中,您可以根据您的主机名设置站点的应用程序上下文。

示例:

# Rules to set ApplicationContext based on hostname
RewriteCond %{HTTP_HOST} ^dev\.example\.de$
RewriteRule .? - [E=TYPO3_CONTEXT:Development]
RewriteCond %{HTTP_HOST} ^alpha\.example\.de$
RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging]
RewriteCond %{HTTP_HOST} ^www\.example\.de$
RewriteRule .? - [E=TYPO3_CONTEXT:Production]

在您的 AdditionalConfiguration.php 中,您根据此上下文设置了数据库。 示例:

if (\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()->isDevelopment()) {
    $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo376_dev';
    $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo376_dev_usr';
    $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'somepw';
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['clearCacheSystem'] = '1';
} elseif (\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext() == 'Production/Staging') {
    $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo376_alpha';
    $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo376_alpha_usr';
    $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'someotherpw';
} else if(\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext() == 'Production') {
    $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo376';
    $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo376_usr';
    $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'someotherpw';

}

在你的 cron 选项卡中(在你的命令行上使用 crontab -e 编辑它)你在调用 cliscript 之前设置环境变量。

示例:

* * * * * TYPO3_CONTEXT=Production/Staging php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler