首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TYPO3调度器什么都不做

TYPO3调度器什么都不做
EN

Stack Overflow用户
提问于 2017-02-15 16:39:48
回答 2查看 913关注 0票数 0

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

该机器是一个运行php7.0php-fpm的freeBSD .这只箱子看起来像:

代码语言:javascript
复制
**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 (如果我在其中注释它),并将邮件输出发送给我。

如果我将“调度器”替换为某种奇怪的东西,我还会得到一个带有输出的邮件,其中包含我应该选择的有效选项。对我来说,这意味着cron正在运行,cli_dispatch.phpsh被正确调用。

在TYPO3后端,调度程序表示配置很好。我可以手动启动cron和它的工作。

那么,还有什么原因.?

编辑

我发现原因是,TYPO3调度程序没有请求正确的数据库。我有一个AdditionalConfiguration文件,其中$GLOBALS‘’TYPO3 3_CONF_VARS‘数据库’中的数据库名是根据变量$_SERVER'SERVER_ name‘更改的。但是在Scheduler中,这个变量是空的。因此,我不得不删除AdditionalConfiguration文件,并且所有的东西都是被选中的。

现在的问题是,如何实现基于Servername的调度器获得正确的数据库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-16 07:12:18

对于其他人,更完整的答案是:

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

示例:

代码语言:javascript
复制
# 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中,您根据这个上下文设置了DB。示例:

代码语言:javascript
复制
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之前设置Envroiment变量。

示例:

代码语言:javascript
复制
* * * * * TYPO3_CONTEXT=Production/Staging php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler
票数 1
EN

Stack Overflow用户

发布于 2017-02-16 05:19:26

而不是更好地检查服务器变量,更好地使用应用程序上下文,这个上下文也可以在调用调度程序时设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42255174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档