Napisałem zadanie harmonogramu. Działa dobrze w moim odwrocie. Niestety nie działa na mojej odległej maszynie.

Maszyna jest FreeBSD z uruchomionym pHP7.0 PHP-FPM. Cron wygląda:

**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";'

Ostatni Crontab jest wykonywany (jeśli go skomentuję), a wyjście pocztowe wysłane do mnie.

Jeśli zastąpię "harmonogram" z czymś dziwnym, dostaję również pocztę z wyjściem zawierającym ważne opcje, które powinienem wybrać. To znaczy dla mnie, że Cron działa, a cli_dispatch.phpsh jest używany prawidłowo.

W Typo3 Backend harmonogram mówi, że konfiguracja jest w porządku. Mogę ręcznie rozpocząć Cron i swoją pracę.

Więc co jeszcze może być powodem ...?

EDYTUJ

Zrozumiałem, że powodem jest, że harmonogram typo3 nie zażądał poprawnej bazy danych. Mam plik ValdtherConfiguration, w którym nazwa bazy danych w $ Globals ['Typo3_Conf_vars'] ["DB"] ["bazy danych"] jest zmieniana na podstawie zmiennej $ _Server ['Server_name']. Ale w harmonogramie ta zmienna jest pusta. Musiałem więc usunąć plik ValdoctConfiguration i wszystko działa jako szczególnie.

Pytanie brzmi teraz, jak mogę osiągnąć Harmonogram uzyskanie odpowiedniej bazy danych na podstawie nazwy serwera?

0
Falk 15 luty 2017, 19:39

2 odpowiedzi

Najlepsza odpowiedź

Dla innych więcej pełniejszej odpowiedzi:

W .HTACCESS ustawiłeś kontekst aplikacji witryny na podstawie nazwy hosta.

Przykład:

# 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]

W Twojej dodatkowejCurzeniowejFiguracji.php ustawiłeś DB na podstawie tego kontekstu. Przykład:

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';

}

Na karcie Cron (edytuj go z Crontab -e w wierszu poleceń) ustawić zmienną Envroyment, zanim zadzwonisz do klozetu.

Przykład:

* * * * * TYPO3_CONTEXT=Production/Staging php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler
0
Falk 16 luty 2017, 07:28

Zamiast sprawdzać zmienną serwera lepiej korzystać z kontekstu aplikacji, który można również ustawić podczas dzwonienia do harmonogramu

1
Georg Ringer 16 luty 2017, 05:19