2017-02-15 30 views
0

我写过一个调度程序任务。它在我的机器上工作得很好。不幸的是它不能在我的远程机器上工作。TYPO3调度程序什么都不做

该机器是一个使用php7.0 php-fpm运行的freeBSD。 这个cron是这样的:

**[email protected] 
@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文件,其中根据变量$ _SERVER ['SERVER_NAME']更改$ GLOBALS ['TYPO3_CONF_VARS'] ['DB'] ['database']中的数据库名称。但是在Scheduler中,这个变量是空的。所以我不得不删除AdditionalConfiguration文件,并且所有内容都按照预期工作。

现在的问题是,我如何才能实现调度程序获取正确的基于Servername的数据库?

回答

0

对于其他人更完整的答案,也可以设置应用程序上下文:

在.htaccess设置你的网站的应用基于上下文在youtr主机名上。

例子:

# 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基于此语境。 例子:

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选项卡中设置了Envroiment变量调用cliscript之前(与你的命令行上的crontab -e编辑)。

实施例:

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

重要的一点是:上下文测试只能用于测试,意味着单元测试,功能测试。对像QS这样的环境使用像生产/测试这样的开发或生产的子环境! –

+0

当然这是正确的。编辑我的答案 – Falk

1

而不是检查服务器变量的更好的使用,同时调用调度

+0

丹科。 Das ist perfekt。 – Falk