我写了一个调度器任务。我的机器工作得很好。不幸的是它不能在我的远程机器上工作。
该机器是一个运行php7.0php-fpm的freeBSD .这只箱子看起来像:
**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的调度器获得正确的数据库?
发布于 2017-02-16 07:12:18
对于其他人,更完整的答案是:
在.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选项卡中(使用命令行上的crontab -e编辑它),在调用cliscript之前设置Envroiment变量。
示例:
* * * * * TYPO3_CONTEXT=Production/Staging php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler发布于 2017-02-16 05:19:26
而不是更好地检查服务器变量,更好地使用应用程序上下文,这个上下文也可以在调用调度程序时设置。
https://stackoverflow.com/questions/42255174
复制相似问题