2017-02-15 29 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