Uwaga! Od sierpnia 2017 forum jest w trybie tylko do odczytu.

Dlaczego? Dlatego, że społeczność TYPO3 przeniosła się na slack'a i stackoverflow:
  • Przeczytaj artykuł wprowadzający do slacka, w którym dowiesz gdzie i jak się zarejestrować.
  • Jeżeli masz pytania odnośnie Polskiej Społeczności TYPO3 zapraszamy na kanał slack'a #community-pl. Rozmawiamy tam w języku polskim.
  • Pytania dotyczące samego TYPO3 zadawaj po angielsku na stackoverflow oznaczając je tagiem "typo3". Następnie posługując się linkiem do tego pytania postaraj się zachęcić ludzi z kanału slack'a #typo3-cms lub bardziej pasujących kanałów tematycznych, żeby na nie odpowiedzieli.
  • Możesz też oczywiście zadawać pytania na slacku bez zakładania wątków na stackoverflow, ale wówczas wiedza ta nie jest indeksowana przez googla i część osób nie będzie chciała Ci z tego powodu pomagać.
  • Dla części osób dzielących się wiedzą ważne jest też budowanie reputacji na stackoverflow. Jest to kolejny powód dla którego powinieneś zadawać pytania na stackoverflow by zwiększyć swoje szanse na znalezienie odpowiedzi. Pamiętaj, żeby oceniać odpowiedzi!
Tematy bez nowych odpowiedzi

typo3 scheduler na home.pl


Autor Wiadomość
Napisane: 11.02.2012 [20:28]
kss
Twórca tematu
zarejestrowany: 19.07.2007
Posty: 1341
hej

Ponieważ na home.pl cron jest odpalany jako zwykły plik php, musimy zrobić lekką modyfikację samego pliku typo3/cli_dispatch.phpsh. Oczywiście, żeby nie zmieniać core robimy te modyfikacje w zupełnie innym pliku.

Oto kroki:
1) w katalogu root serwera home.pl tam gdzie tworzymy katalogi dla poszczególnych serwisów tworzymy plik wywołania crona - tutaj zrobimy wywołanie co pięć minut - czyli tworzymy plik cron-5min.php

2) w pliku wstawiamy:

PHP
<?php
 
$_SERVER['argv'][0] = '/xxxxx/typo3/cli_dispatch.phpsh';
$_SERVER['argv'][1] = 'scheduler';
 
/*
 W tym miejscu wstawiamy zawartość pliku typo3/cli_dispatch.phpsh - wyrzucając/remując linię 79 
 
 //die('Not called from a command line interface (e.g. a shell or scheduler).' . chr(10));
 
*/
 
?>


Uwaga! xxxxx to nazwa katalogu w którym jest instalacja TYPO3.

3) Teraz musimy zabezpieczyć bezpośrednie wywołanie tego skryptu przez osoby z zewnątrz. W tym celu stworzymy w tym samym katalogu, w którym jest cron-5min.php plik .htaccess z taką zawartością:

:Location /cron-5min.php
Access deny all



Więcej o cron na home.pl
http://pomoc.home.pl/bazawiedzy/zagadnienia/165


keywords: scheduler, home.pl, cli_dispatch.phpsh

=======================================
t33k
Napisane: 31.07.2012 [21:38]
kozi85
zarejestrowany: 04.10.2010
Posty: 33
Witam,

postąpiłem tak jak w opisie i niestety Scheduler nie uruchamia zadań.
Pracuję na TYPO3 4.6.10 na home.pl.

Mam wiele zadań ustawionych do uruchomienia, z różną częstotliwością. Niektóre co 5, inne co 10 czy 30 minut.

Poniżej dla pewności wklejam kod z pliku /cron-5min.php

Z góry bardzo dziękuję za pomoc.

PHP
<?php
 
$_SERVER['argv'][0] = '/cms/typo3/cli_dispatch.phpsh';
$_SERVER['argv'][1] = 'scheduler';
 
if (substr(php_sapi_name(), 0, 3) == 'cgi') {
        // sanity check: ensure that we're running in a shell or cronjob (and NOT via HTTP)
        $checkEnvVars = array('HTTP_USER_AGENT', 'HTTP_HOST', 'SERVER_NAME', 'REMOTE_ADDR', 'REMOTE_PORT', 'SERVER_PROTOCOL');
        foreach ($checkEnvVars as $var) {
                if (array_key_exists($var, $_SERVER)) {
                        echo 'SECURITY CHECK FAILED! This script cannot be used within your browser!' . chr(10);
                        echo 'If you are sure that we run in a shell or cronjob, please unset' . chr(10);
                        echo 'environment variable ' . $var . ' (usually using \'unset ' . $var . '\')' . chr(10);
                        echo 'before starting this script.' . chr(10);
                        exit;
                }
        }
        unset($checkEnvVars);
 
	// mimic CLI API in CGI API (you must use the -C/-no-chdir and the -q/--no-header switches!)
	ini_set('html_errors', 0);
	ini_set('implicit_flush', 1);
	ini_set('max_execution_time', 0);
	if (!ini_get('register_argc_argv')) {
		$argv = $_SERVER['argv'];
		$argc = $_SERVER['argc'];
	}
	define(STDIN, fopen('php://stdin', 'r'));
	define(STDOUT, fopen('php://stdout', 'w'));
	define(STDERR, fopen('php://stderr', 'w'));
} elseif (php_sapi_name() != 'cli') {
	//die('Not called from a command line interface (e.g. a shell or scheduler).' . chr(10));
}
 
	// Defining circumstances for CLI mode:
define('TYPO3_cliMode', TRUE);
 
	// Get path to this script
$temp_PATH_thisScript = isset($_SERVER['argv'][0]) ? $_SERVER['argv'][0] : (isset($_ENV['_']) ? $_ENV['_'] : $_SERVER['_']);
 
	// Figure out if the path is relative
$relativePath = FALSE;
if (stristr(PHP_OS,'win') && !stristr(PHP_OS,'darwin')) {
		// Windows
	if (!preg_match('/^([A-Z]<img src="typo3conf/ext/mm_forum//res/smilies/icon_smile.gif" alt="icon_smile.gif" />?\\/', $temp_PATH_thisScript)) {
		$relativePath = TRUE;
	}
} else {
		// *nix, et al
	if ($temp_PATH_thisScript{0} != '/') {
		$relativePath = TRUE;
	}
}
 
	// Resolve path
if ($relativePath) {
	$workingDirectory = $_SERVER['PWD'] ? $_SERVER['PWD'] : getcwd();
	if ($workingDirectory) {
		$temp_PATH_thisScript =
			$workingDirectory.'/'.preg_replace('/\.\//','',$temp_PATH_thisScript);
		if (!@is_file($temp_PATH_thisScript)) {
			die('Relative path found, but an error occurred while resolving the absolute path: ' . $temp_PATH_thisScript . chr(10));
		}
	} else {
		die ('Relative path found, but resolving absolute path is not supported on this platform.'.chr(10));
	}
}
 
	// Define absolute path to this script
define('PATH_thisScript',$temp_PATH_thisScript);
 
if (!isset($_SERVER['argv'][1]))	{
	die ('The first argument must be a valid key.'.chr(10));
}
 
	// First argument is a key that points to the script configuration
define('TYPO3_cliKey', $_SERVER['argv'][1]);
 
	// Include init file:
require(dirname(PATH_thisScript).'/init.php');
 
	// Make sure output is not buffered,
	// so that command-line output and interaction can take place
t3lib_div::flushOutputBuffers();
 
if (defined('TYPO3_cliInclude')) {
	include(TYPO3_cliInclude);
} else {
	die('No include file configured for key "'.TYPO3_cliKey.'".'.chr(10));
}
 
?>


pozdrawiam,

_________________
PK
Napisane: 07.05.2014 [10:06]
banama
zarejestrowany: 06.01.2009
Posty: 58
Udało mi się odpalić schedulera na 6.1+

1. W katalogu serwisu (np. /twojadomena) umieszczam spreparowany pliczek na podstawie zawartości cli_dispatch.phpsh (np. scheduler.php):

PHP
$sciezka  = '/twojadomena/typo3';
$cli_file  = $sciezka . '/cli_dispatch.phpsh';
$_SERVER['argv'][0] = $cli_file;
$_SERVER['argv'][1] = 'scheduler';
define('TYPO3_MODE', 'BE');
define('TYPO3_cliMode', TRUE);
 
require $sciezka . '/sysext/core/Classes/Core/CliBootstrap.php';
//\TYPO3\CMS\Core\Core\CliBootstrap::checkEnvironmentOrDie();
 
require $sciezka . '/sysext/core/Classes/Core/Bootstrap.php';
\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
	->baseSetup('typo3/')
	->loadConfigurationAndInitialize()
	->loadTypo3LoadedExtAndExtLocalconf(TRUE)
	->applyAdditionalConfigurationSettings()
	->initializeTypo3DbGlobal();
 
\TYPO3\CMS\Core\Core\CliBootstrap::initializeCliKeyOrDie();
 
\TYPO3\CMS\Core\Core\Bootstrap::getInstance()
	->loadExtensionTables(TRUE)
	->initializeBackendUser()
	->initializeBackendUserMounts()
	->initializeLanguageObject();
 
	// Make sure output is not buffered, so command-line output and interaction can take place
\TYPO3\CMS\Core\Utility\GeneralUtility::flushOutputBuffers();
 
try {
	include(TYPO3_cliInclude);
} catch (\Exception $e) {
	fwrite(STDERR, $e->getMessage() . LF);
	exit(99);
}
 
\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->shutdown();


2. Uwaga na wersję interpretera PHP (!) używaną przez CRON na home.pl. W moim przypadku pomimo ustawienia globalnie wersji 5.3, crony są odpalane w 5.2.17. Dlatego po konsultacji z home.pl w katalogu root serwera umieściłem właściwy plik cron np. cron-daily.php z zawartością:

PHP
system('wget --delete-after http://twojadomena/scheduler.php');


To ma dodatkową zaletę, bo można w tym pliku powstawiać odwołania do wielu serwisów -> patrz ten wątek

3. Należy jeszcze zabezpieczyć przed niepowołanym wywołaniem plik scheduler.php (.htaccess).

:Location /scheduler.php
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx


xxx.xxx.xxx.xxx - to IP twojego serwera.

cron-daily.php też trzeba zabezpieczyć (patrz kss).

[Ten temat był edytowany 1 razy. Ostatnio 07.05.2014 o 11:38.]