Autor Zpráva
quatzael
Profil
Ahoj, řeším aktuálně jeden problém.
Mám aplikaci napsanou v Laravelu a je to puštěný na (sdíleném) webhostingu. Potřebuju tam spouštět nějaký Crony.

Webhosting to má v administraci řešený tak, že tam napíšu odkaz na script, který se má pravidelně spouštět a k němu se ještě nastaví frekvence spouštění.
Jenže to asi v Laravelu úplně nejde, aby se ze serveru spustil nějaký script a nešlo to přes routování, ne?

Samotný Laravel Cronový úlohy řeší nějak přes kernel.php, kde se nastaví scheduling. Ale to podle mě zase nepovolí ten webhosting.

Má s tím někdo prosím nějaké zkušenosti, jak se tohle řeší?

Klidně nějakou ochcávku na Laravel, aby umožnil scriptu se spustit sám bez toho aby to procházelo přes všechny ty routery, controllery apod.

Díky.
ttttttttttttttt
Profil *
Jsou tři možnosti, jak to může fungovat.

1) Script periodicky spouštěný přes cron / systemd timer / …
2) Služba, která běží na pozadí, většinu času spí a probouzí se jen na spuštění jobu
3) Při requestu se zkontroluje, jestli není potřeba provést job.

Laravel musí jednu z nich používat k tomu, aby provedlo to, co je v kernel.php. 2) se nedělá, není potřeba, aby na serveru pořád něco běželo. 3) je nouzovka, pokud není cron, naráží na omezení délky requestu. Typicky jde nastavit 1), v dokumentaci je potřeba najít jak.

Hledání cronu v dokumentaci najde:

* * * * * cd /your-project-path && php artisan schedule:run >> /dev/null 2>&1

www.positronx.io/laravel-cron-job-task-scheduling-tutorial-with-example/#tc_10633_07
Keeehi
Profil
quatzael:
Taky je dobré zjistit, jaký typ cronu webhosting používá. Některé mají totiž cron ve stylu unixového cronu. Což je cca ekvivalent příkazu php /folders/script.php. A některé to fejkují externím HTTP požadavkem. Tedy ekvivalentem curl <code>https://example.com/folders/script.php</code>.
Rozdíl je, že první případ vůbec nejde přes webový server a php se spouští napřímo. Druhý způsob je vlastně jako kdyby někdo periodicky navštěvoval tu danou URL. Rozdíl pak je v tom, co bude obsahovat proměnná $_SERVER.
quatzael
Profil
Díky za příspěvky. Webhosting má v administraci input na vložení cesty ke scriptu (nebo přímo script), ale je to natvrdo nastavený přímo z public folderu: http://www.mojedomena.cz/{path-to-the-script}, což znamená, že cron může teoreticky kdykoli spustit jakákoli třetí strana.
To úplně nechci. Dá se to samozřejmě pojistit nějakou složitě dlouhou url a potom ještě ukládáním a kontrolou času spuštění cronu do databáze, ale čekal jsem, že bude možné spouštět neveřejný script, ke kterému má přístup jenom server.
Uvidím, kdyby to laravel nějak hodně komplikoval, tak to asi budu řešit cronem na jiné doméně, která bude házet requesty na tu doménu s laravelem a samozřejmě zašifruju url.


ttttttttttttttt:
No správný a asi jediný možné způsob z těch tvých vyjmenovaných je 1), jenže jde o to, že na webhostingovým serveru si nemůžu spouštět příkazy z příkazového řádku a to co si u sebe nastavím na localhostu potom nebude fungovat na hostingu.
Další věc je to, že ten webhosting ty crony nejdřív kontroluje a potom schvaluje (aby tam neběžel nějaký zatěžující script).
Keeehi
Profil
quatzael:
tak to asi budu řešit cronem na jiné doméně, která bude házet requesty na tu doménu s laravelem a samozřejmě zašifruju url.
Takže vytvoříš úplně to samé co nabízí tvůj aktuální wehosting.

Nevím, co si představuješ pod zašifrovanou url. Jestli to, že název toho scriptu bude nějaký dlouhý nahodný řetězec, tak to úplně šifrování není ale ok. To co bys v takovém případě potřeboval je spíše https. Aby tu cílovou URL po cestě nemohl nikdo zachytit.
quatzael
Profil
Keeehi:
Takže vytvoříš úplně to samé co nabízí tvůj aktuální wehosting.
No, je pravda, že by to asi bylo zbytečné, kdyby to ten webhosting řešil tím externím HTTP požadavkem, jak jsi psal. Což sice nyní na první pohled opravdu vypadá, že to tak je, ale třeba ten webhosting nabízí jenom spouštění scriptu přes ten unixový cron a script nelogicky požadují, aby byl v public folderu. A pak by tam ten Laravel mohl dělat neplechu.

Nevím, co si představuješ pod zašifrovanou url. Jestli to, že název toho scriptu bude nějaký dlouhý nahodný řetězec, tak to úplně šifrování není ale ok.
Samozřejmě, že mám na mysli velmi dlouhý a velmi (jednorázově) "náhodný" řetězec :o)

To co bys v takovém případě potřeboval je spíše https.
https mám.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0