2017-02-15 1 views
0

나는 스케줄러 태스크를 작성했습니다. 내 기계 가공에 잘 작동 했어. 불행히도 내 원격 컴퓨터에서 작동하지 않습니다.TYPO3 스케줄러는 아무 것도하지 않습니다

기계는 php7.0 php-fpm이 실행되는 FreeBSD입니다. (내가 그것을에서 언급 된 경우) 및 메일 출력이 나에게 보낸

**[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이 실행됩니다 크론는 것 같습니다.

"scheduler"를 이상한 것으로 바꾸면 내가 선택해야하는 올바른 옵션이 포함 된 메일을 받게됩니다. 그래서 나를 위해, 그 cron 실행되고 cli_dispatch.phpsh 올바르게 호출됩니다.

TYPO3 백엔드에서 스케줄러는 구성이 정상이라고 말합니다. 수동으로 cron을 시작하고 그 일을 할 수 있습니다.

다른 이유는 무엇일까요?

편집

가 나는 이유는 TYPO3 스케줄러가 정확한 데이터베이스를 요청하지 않았다라는 것을 알아 냈다. $ _SERVER [ 'SERVER_NAME'] 변수에 따라 $ GLOBALS [ 'TYPO3_CONF_VARS'] [ 'DB'] [ 'database']의 데이터베이스 이름이 변경되는 AdditionalConfiguration 파일이 있습니다. 그러나 스케줄러에서이 변수는 비어 있습니다. 그래서 AdditionalConfiguration 파일을 삭제해야했고 모든 것이 정상적으로 작동하고 있습니다.

지금 질문은 ServerName을 기반으로 올바른 데이터베이스를 가져 오는 스케줄러를 얻는 방법입니다. 기반의 .htaccess에서

이 사이트의 응용 프로그램 컨텍스트를 설정합니다

답변

0

를 호출하는 동안도 설정할 수있는 응용 프로그램 컨텍스트를 사용 youtr 호스트 이름.

예 :

당신의 AdditionalConfiguration.php에서
# 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] 

이 컨텍스트를 기반으로 DB를 설정합니다. 예 : 당신이 cliscript를 호출하기 전에 당신이 Envroiment 변수를 설정

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

} 당신의 크론 탭에서

(명령 행에서의 crontab -e와 편집을).

예 :

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

중요한 측면 참고 사항 : 컨텍스트 테스트는 테스트에만 사용해야하며 단위 테스트, 기능 테스트를 의미합니다. QS와 같은 환경에서 생산/테스트와 같은 개발 또는 생산의 하위 컨텍스트를 사용하십시오! –

+0

물론 맞습니다. 내 대답 수정 – Falk

1

대신 서버 변수를 확인의 더 나은 스케줄러 다른 사람보다 완벽한 대답을

+0

Danke. Das ist perfekt. – Falk

관련 문제