Nette pod cronem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
crempa
Člen | 198
+
0
-

Ahoj,

nehral jse si tu uz nekdo s Nette aplikaci (resp. casti aplikace) spoustenou cronem (tj. bez webserveru). Rad bych vyuzil veskera nastaveni, robotloader, pripojeni k databazi atd. co mam ve webove casti a pro cron vyhradil napr. jeden presenter. Zatim jsem vsak skoncil na „Method is not implemented“.

Pokud mate nekdo nejakou zkusenost, tak sem s tim at zase neobjevuju kolo :-)

Diky !

romansklenar
Člen | 655
+
0
-

A čeho se chyba týkala? Není to toto ukončení skriptu?

Laděnka má myslím i console mode, který by mohl pomoct při odhalování chyby, ale nezkoušel jsem jak to přesně funguje.

crempa
Člen | 198
+
0
-

No vzhledem k tomu ze jsem jeste inicializacni cast nette prilis nezkoumal a dokumentace k tomu jeste neni zkusil jsem proste /usr/bin/php /var/www/project/htdocs/index.php a zda se ze to umre v $application->run() na nepodporovane metode

phx
Člen | 651
+
0
-

Jak poustit cron? Osobne to delam pres wget a zadny problem nemam.

crempa
Člen | 198
+
0
-

klasicky crontab demonem, nejsem zadnej linux guru takze zkusim nastudovat ten wget, chapu to tak ze v crontabu volas wget na konkretni URL a pouzijes tak webserver… ?

Jod
Člen | 701
+
0
-

Skôr by som použil curl, wget ukladá na disk (ako curl -O).
Ale dobrý nápad.

crempa
Člen | 198
+
0
-

no jako obejit to tim asi lze, ale na druhou stranu pokud ty cron scripty nechci mit pristupne zvenku tak je nutne zase nejake konfigurace apache navic..

no zatim to asi vyresim spesl bootstrapem, jen pro tento ucel, kde se nevytvori router a nespusti aplikace, Environment, config i loader by meli chodit (aspon se zda ze chodi :-)

Jod
Člen | 701
+
0
-

Keď tak pacneš do parametru nejaký hash, alebo zacryptovaný reťazec a cudzí by ti to nemal spúštať. Najlepšie by to bolo cez htaccess overovať, ale ktovie ako nato v nette.

Patrik Votoček
Člen | 2221
+
0
-

Jod napsal(a):

Skôr by som použil curl, wget ukladá na disk (ako curl -O).
Ale dobrý nápad.

Wget do /dev/null a nikam se ti nic neuklada

Editoval vrtak-cz (3. 6. 2009 16:01)

phx
Člen | 651
+
0
-

A but v Apache nrbo v PHP omez zpousteni pouze pro localhost. Ono je to bezpecnejsi nez poustet z cronu primo php, protoze pak php bezi pod pravy cronu (nejcasteji roota).

edke
Člen | 198
+
0
-

crempa wrote:

no jako obejit to tim asi lze, ale na druhou stranu pokud ty cron scripty nechci mit pristupne zvenku tak je nutne zase nejake konfigurace apache navic..

no zatim to asi vyresim spesl bootstrapem, jen pro tento ucel, kde se nevytvori router a nespusti aplikace, Environment, config i loader by meli chodit (aspon se zda ze chodi :-)

Urcite treba hladat pricinu, preco ti to nejde spustit cez shell. Riesenie wget/curl nesie so sebou viacero problemov. Jednak je skript verejne pristupny, rezia navyse osetrovat pristup k nemu atd. Jednak nemusis cez shell riesit veci ako max_execution_time a pod. Ja dokonca Nette/dibi vyuzivam pri viacerych nastrojoch napisanych v php, ktore pustam cez shell, ako rozne aktualizacne skripty, migracny skript databazy a dat z mysql do psql a pod.

Len sa treba povenovat spravnemu nastaveniu a pravam, aby ti korektne aplikacia logovala. Potom sa vzniknute problemy daju pekne riesit cez Debug. Ak sa dostanes ku konretnej chybe, kludne sa ozvi, ak budem vediet, pomozem. Fungujem pod ubuntu server a nemam s kombinaciou Nette-dibi-shell absolutne ziadne problemy a nemam ani ziadne obmedzenia oproti pouzivaniu Nette-dibi cez apache/lighttpd.

pekelnik
Člen | 462
+
0
-

romansklenar napsal:

A čeho se chyba týkala? Není to toto ukončení skriptu?

Ano :) jedná se přesně o tento řádek na kterém aplikace v konzoli skoná.

Jak řešit spouštění pod cronem s plným využitím Nette\Application?

Současná situace na mě působí dojmem jako by Nette spuštění v konzoli vůbec nepodporovala, naproti tomu zde ovšem existuje mnoho náznaků, že kozole podporována jest:

  • chyba při neexistující sekci [console] v config.ini
  • Environment::isConsole()
  • Environment::CONSOLE

Předesílám, že řešení jako vrtěti wgetem nebo vynechání Nette\Application mi nepřijdou jako ideální z již zmíněných důvodů.

Co se týče použití, předpokládal bych něco jako:

$ php index.php Default:cron param1 param2

Mohl by, prosím, něxgdo osvětlit celou situaci?

Pokud bude vše jasné rád připravím stránku do dokumentace, neboť o tomhle tam není ani zmínka.

Ondrej
Člen | 110
+
0
-

pekelnik napsal(a):
Předesílám, že řešení jako vrtěti wgetem nebo vynechání Nette\Application mi nepřijdou jako ideální z již zmíněných důvodů.

Co se týče použití, předpokládal bych něco jako:

$ php index.php Default:cron param1 param2

Mohl by, prosím, něxgdo osvětlit celou situaci?

Pokud bude vše jasné rád připravím stránku do dokumentace, neboť o tomhle tam není ani zmínka.

Toto me taky zajima. Kdyz jsem to zkoumal, tak jsem dosel k zaveru, ze se pouzije routovani, ktere ale nema zadnou URL k parsovani. Podle me consolove aplikace v Nette spoustet nejdou :(

edit: Aplikace podporuje pouze HTTP volani GET, POST, HEAD. https://api.nette.org/…ion.php.html#94

Editoval Ondrej (6. 7. 2009 13:59)

romansklenar
Člen | 655
+
0
-

pekelnik napsal(a):

Současná situace na mě působí dojmem jako by Nette spuštění v konzoli vůbec nepodporovala, naproti tomu zde ovšem existuje mnoho náznaků, že kozole podporována jest:

  • chyba při neexistující sekci [console] v config.ini
  • Environment::isConsole()
  • Environment::CONSOLE

Konzolový mód se asi nedá detekovat, takže se musí manuálně zapnout. Zkus to s tímhle:

Debug::$consoleMode = TRUE;

Co se týče použití, předpokládal bych něco jako:

$ php index.php Default:cron param1 param2

No to nevím, asi to bude haprovat zase na stejném místě. Předávat parametry jde pouze přes povolené metody.

Ondrej
Člen | 110
+
0
-

romansklenar napsal(a):
Konzolový mód se asi nedá detekovat, takže se musí manuálně zapnout. Zkus to s tímhle:

konzolovy mod se da detekovat pres Environment::isConsole(), akorat musi mit svoji sekci v config.ini, ktera ale neni rozdelena na produkcni a vyvojovou konzolu.

Ondrej
Člen | 110
+
0
-

pekelnik napsal(a):

$ php index.php Default:cron param1 param2

Mohl by, prosím, něxgdo osvětlit celou situaci?

Nette pod cronem jsem vyresil takto: https://forum.nette.org/…te-a-php-cli

Pari
Člen | 15
+
0
-

Mě pomohl tento článek http://interval.cz/…demona-cron/ trochu pochopit jak to nastavit (mám VPS s Plesk administrací).

Majkl578
Moderator | 1364
+
0
-

phx napsal(a):

A but v Apache nrbo v PHP omez zpousteni pouze pro localhost. Ono je to bezpecnejsi nez poustet z cronu primo php, protoze pak php bezi pod pravy cronu (nejcasteji roota).

V crontabu si můžeš nastavit pod jakým userem se ti to spustí. Je k tomu kolonka „user“.