Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: CakePHP 3 uruchamianie zadań na home.pl
Forum PHP.pl > Forum > PHP
wojtek6000
Witam wszystkich:)

Napotkałem pewien problem przy pracy z frameworkiem CakePHP. Chciałbym aby niektóre akcje wykonywały się cyklicznie bez mojej ingerencji czyli np. wysyłały się maile z raportami do określonych użytkowników. Do wykonania tego zadania chce wykorzystać możliwość serwera home.pl i zadania crona. W tym celu napisałem funkcje jako zadania powłoki. Po uruchomieniu tego skryptu na serwerze lokalnym (localhost) z lini komend wszystko działa poprawnie i funkcja się wykonuje (poprawnie wysyła maile). Problem pojawia się kiedy na zdalnym serwerze chce uruchomić to samo zadanie. I tu moje pytanie do Was: co mam wpisać w pliku cron aby uruchomić to zadanie? Dzwoniłem do pomocy home.pl i powiedzieli mi że wszystko jej poprawnie skonfigurowane czyli plik jest w dobrym miejscu, ma odpowiednią nazwę i uruchamia się tak jak sobie tego życzę lecz w nim znajduje się błąd. Sęk w tym że nie wiem jak poprawnie wywołać to zadanie...
Szukałem i znalazłem wskazówki ze powinienem użyć funkcji system lub exec... ale jak mam ich użyć?
memory
system('wget adreswww/cron.php?key=6f4LuIzrJjQg2JprEt03gntGas1AeUx'%3b');
wojtek6000
Tzn jak mam to rozumieć? Skąd ta wartość? Czy mógłbym prosić o małe wyjaśnienie?
memory
wartość jest przykładowa system(wget 'plik z cronem') . system - uruchamia shella. wget - pobiera plik
wojtek6000
Hmmm... zrobiłem jak mówisz lecz po odpaleniu mojego crona z przeglądarki pojawia się taki komunikat:

Malformed header from CGI script: --2016-12-08 21:08:31-- http://nazwa_serwera.home.pl/public_html/cake/bin/cake.php Resolving nazwa_serwera.home.pl (nazwa_serwera.home.pl)... adres_ip Connecting to nazwa_serwera.home.pl (nazwa_serwera.home.pl)|adres_ip|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2016-12-08 21:08:31 ERROR 404: Not Found. Content-type: text/html; charset=UTF-8

Natomiast mój kod wyglada następująco i jest to zawartość pliku cron-5min.php:

<code>
  1. <?php
  2. ?>

</code>

echo i pre użyłem żeby zobaczyć jakikolwiek efekt w przeglądarce:) Zadanie shellowe o nazwie Hello zwraca tylko napis Hello. Wydaje mi się że jeżeli ten skrypt poprawnie sie wykona to w przeglądarce wyświetli się właśnie Hello. Co chyba ze błędnie myśle...

Nie wiem czy my się dobrze zrozumieliśmy więc wyjaśnię jeszcze raz: samo wykonywanie pliku co 5 minut działa lecz jest błąd w pliku crone-5min.php bo nie wiem jak mam uruchomić skrypt shellowy wbudowany w cakephp o nazwie cake.php który z kolei za parametr przyjmuje nazwę napisanego przeze mnie skryptu i dopiero on wykonuje zaplanowane akcje.
ZenekN
@wojtek6000, musisz próbować metodą prób i błedów praktycznie każdy język to tak naprawdę interfejs dla ludzi stworzony przez ludzi ;-)

popróbuj assembler i zobaczysz wtedy co to znaczy podwyższony poziom trudności ;-]
memory
https://pomoc.home.pl/baza-wiedzy/cykliczne...chamianie-cron/
Pobiera plik a nie uruchamia "zadanie shellowe" . Musisz opakować "zadanie shellowe" w plik php aby można było odpalić z poziomu przeglądarki.
wojtek6000
I właśnie o to mi chodzi..... Nie wiem co mam napisać by uruchomić aplikacje cake.php... Na localhoscie nie ma problemu bo uruchamiam cmd i pisze:

<code>
php.exe /sciezka_dostepu/bin/cake.php NazwaKlasy NazwaMetody
</code>

i wszystko pięknie działa. Bardzo proszę o wskazówkę czy w ogóle da się uruchomić tego typu aplikacje na zdalnym serwerze...

Tu link do dokumentacji:
http://book.cakephp.org/3.0/en/console-and-shells.html
kapslokk
Próbowałeś:

  1. <?php
  2. system('php /sciezka_dostepu/bin/cake.php NazwaKlasy NazwaMetody');

?
wojtek6000
Mam juz w pliku coś takiego :

<code>
  1. <?php
  2. chdir('/cake/bin/');
  3. echo "<pre>".shell_exec("ls")."</pre>";
  4. //echo shell_exec("./cake.php Hello");
  5.  
  6. //system("sh /start.sh");
  7. echo "<pre>".system('php.exe cake.php MojeSkrypty sendmail')."</pre>";
  8. echo "<pre>".system('./php cake.php MojeSkrypty sendmail')."</pre>";
  9. echo "<pre>".system('php cake.php MojeSkrypty sendmail')."</pre>";
  10. echo "<pre>".system('./php.exe cake.php MojeSkrypty sendmail')."</pre>";
  11.  
  12. echo "<pre>".system('php.exe cake MojeSkrypty sendmail')."</pre>";
  13. echo "<pre>".system('./php cake MojeSkrypty sendmail')."</pre>";
  14. echo "<pre>".system('php cake MojeSkrypty sendmail')."</pre>";
  15. echo "<pre>".system('./php.exe cake MojeSkrypty sendmail')."</pre>";
  16. ?>

</code>

Jednak dalej nie działa... Mój skrypt powinien stworzyć pusty plik na serwerze i wysłać maila... na localhoscie działa bez zarzutu...
kapslokk
chdir('/cake/bin/');
Nie mam pojęcia jak zadziała to na windowsie, ale na linuxie na pewno nie tak jakbyś tego chciał - prawdopodobnie wywali, ze nie masz takiego katalogu.

Spróbuj odpalić
  1. system('php >>sciezka_do_katalogu_<</cake.php MojeSkrypty sendmail');

Najlepiej podaj pelna sciezke.
wojtek6000
Tzn. kiedy odpalam to w przeglądarce i dam komende ls to wyświetla mi pliki z danego katalogu z serwera.

teraz mój plik wygląda tak:

  1. <?php
  2. // chdir('/cake/bin/');
  3. echo "<pre>".shell_exec("ls")."</pre>";
  4. //echo shell_exec("./cake.php Hello");
  5.  
  6. //system("sh /start.sh");
  7.  
  8. echo "<pre>".system('php.exe /cake/bin/cake.php MojeSkrypty sendmail')."</pre>";
  9. echo "<pre>".system('php /cake/bin/cake.php MojeSkrypty sendmail')."</pre>";
  10.  
  11.  
  12. echo "<pre>".system('php.exe /cake/bin/cake MojeSkrypty sendmail')."</pre>";
  13. echo "<pre>".system('php /cake/bin/cake MojeSkrypty sendmail')."</pre>";
  14.  
  15.  
  16. ?>


i zwraca mi taki błąd:

sh: php.exe: command not found sh: php: command not found sh: php.exe: command not found sh: php: command not found
kapslokk
Jak odpalasz z przeglądarki to skrypt "juz jest w odpowiednim katalogu" cron odpala go z konsoli i dlatego nie bangla tak jak trzeba.
php.exe nie dziala bo to nie windows.
Zamień
  1. echo "<pre>".system('php /cake/bin/cake.php MojeSkrypty sendmail')."</pre>";

na
  1. echo "<pre>".system('php56-cli /cake/bin/cake.php MojeSkrypty sendmail')."</pre>";
i dodatkowo przed /cake wstaw sciezke BEZWZGLEDNA do tego katalogu - komenda pwd przez ssh albo echo (__DIR__); w skrypcie php.
wojtek6000
Jesteś genialny:D Wszystko działa według twoich zaleceńsmile.gif Bardzo dziękuję za pomoc:D
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.