2010-10-08 38 views
6

Mam kilka plików PHP do uruchomienia przez crona. I skonfigurować crons za pomocą CommandCron działa, ale funkcjonalność nie działa

crontab crontab.txt 

Wewnątrz pliku crontab.txt, pisałem komendy crona tak: -

#(Updating tutor activities) - every minute 
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php 

Ale żadna z funkcjonalności pracują (zapytania do bazy danych, wysyłając przypomnienie maili itp.). Uruchamianie adresów URL działa ręcznie.

Następnie umieściłem mój adres e-mail w MAILTO i otrzymałem maile. W mailu otrzymałem całe źródło HTML strony. Czego oczekuje się w mailu? Dlaczego moje funkcje nie działają?

Aktualizacje
Jeśli zmienię moje komendy crona do

#(Updating tutor activities) - every minute 
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

nadal nie ma sukcesu, a to jest w mojej poczty -

--15:03:01-- http://project/cron/tutor_activities.php 
      => `tutor_activities.php' 
Resolving project... IP Address 
Connecting to test.project|IP Address|:80... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently 
Location: http://project./ [following] 
--15:03:01-- http://project./ 
      => `index.html.1' 
Resolving project.... IP Address 
Connecting to project.|IP Address|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: http://project/home/ [following] 
--15:03:01-- http://project/home/ 
      => `index.html.1' 
Resolving project... IP Address 
Connecting to wproject|IP Address|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 
index.html.1 has sprung into existence. 
Retrying. 

i wiele index.html.1, index.html.2 plików zbierającą się w źródło mojego projektu. Nie chcę tworzyć tych plików. Po prostu chcę pliki do wykonania.

same wyniki, jeśli mogę użyć jednego z dwóch poleceń -

* * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

    * * * * * wget http://project/cron/tutor_activities.php 

działa php komenda z MAILTO zestaw wysyła mi ten błąd/bin/sh: PHP: nie znaleziono polecenia.

* * * * * php /path/to/test.php 

Tak, nie mogę użyć polecenia php.

Napisałem prosty mailto() wewnątrz mojego test.php. Poczta nie przychodzi po uruchomieniu przez cron (przy użyciu zarówno niepowodzeń wget i php), ale uruchomienie URL ręcznie działa.

Mój problem
Żeby było jasne, znowu, moim głównym problemem jest to, że funkcjonalność wewnątrz plików crona nie jest uruchomiony. Tworzenie plików jest sprawą drugorzędną.

Każda pomoc będzie mile widziane

Dzięki,
Sandeepan

+0

Nie musisz być zalogowany w systemie internetowym, aby uruchamiać te zapytania, wysyłać pocztę itp., Prawda? –

+0

Sam znalazłem rozwiązanie. Zgadzam się, że szczegóły mojego pytania nie były wystarczające, aby ktokolwiek mógł odgadnąć rzeczywisty powód. Ale to było problemem. Ale dziękuję wszystkim za twoje wysiłki. Nie oferuję nikomu ręcznie nagrody. Niech głosy decydują o nagrodach. –

Odpowiedz

1

Sam znalazłem problem. Nie umieściłem tego samego adresu URL w moim pliku crontab, który uruchamiałem ręcznie i to był mój błąd.

Podczas uruchamiania ręcznie wpisałem test w adresie URL, pojawiła się lista zapisanych adresów mojej przeglądarki i wybrałem adres URL http://www.test.project.com/cron/tutor_activities.php, ale w pliku crontab umieściłem http://test.project.com/cron/tutor_activities.php. Błędnie założyłem, że to będzie działać http://www.test.project.com/cron/tutor_activities.php (ponieważ mamy regułę przepisywania, aby dodać www)

Ale reguła przepisywania przekierowywała ją na numer http://www.test.project.com/home. Właśnie dlatego treść HTML w mailach.

Najważniejszą rzeczą do nauczenia się tutaj jest upewnienie się, że nie pomijamy najdrobniejszych rzeczy i nie zakładamy, że zrobiliśmy wszystko poprawnie. W moim przypadku lepiej skopiować i wkleić działający adres URL do pliku cron.

7

jeśli chcesz zadzwonić url jako cronjob, będziesz musiał użyć somthing jak wget. jeśli jest to php-skrypt na serwerze byłoby łatwiejsze w użyciu php /...pathtomyscript.../cron/tutor_activities.php

+0

@oezi, dziękuję za odpowiedź, już używam wget, a część '-O - -q -t' w moim wget jest dla nie wysyłania plików, o ile pamiętam. Sprawdź moją aktualizację. Jeśli usuniemy '-O - -q -t', każde uruchomienie crona utworzy plik. Nie chcę tego. –

+0

możesz spróbować zrobić "wget ​​myurl>/dev/null" (lub coś podobnego, nie znając dokładnej składni), która zrobiłaby "normalny" wget bez opcjonalnych parametrów i "zapisz" autotest do/dev/null – oezi

+0

@oezi działa '* * * * * php/path/to/test.php' z zestawem' MAILTO' wysyła mi ten błąd '/ bin/sh: php: command not found'. Napisałem proste 'mail()' wewnątrz mojego test.php. Poczta nie przychodzi po uruchomieniu przez crona (przy użyciu zarówno wget, jak i php), ale działający URL działa ręcznie. –

1

Po wywołaniu wget z -O -, to wyśle ​​pobraną zawartość na standardowe wyjście, które cron wysyła do Ciebie za pośrednictwem wiadomości e-mail . W pierwszym przypadku robi dokładnie to, co powinno.

Po wywołaniu wget z parametrem -O, spróbuje zapisać pobraną zawartość jako plik o tej samej nazwie, co pobierana strona internetowa. Jeśli istnieje, doda przyrostek do nazwy, jak widziałeś. W tym drugim przypadku robi dokładnie to, co powinno.

Z twojego pytania nie wynika jasno, gdzie ma się znaleźć wyjście, ale jeśli chcesz zapisać wynik do tego samego pliku za każdym razem, użyj -O myfilename.html.

+0

Nie chcę, aby te pliki zostały utworzone.I Po prostu chcę pliki do wykonania i produkować wyniki. Ale ponieważ wyniki nie nadchodzą (zmiany w bazie danych, maile nie idą). –

+0

OK, tak wiele z twoich pytań dotyczyło wydajności wget, nie było jasne, że nawet o to nie dbasz. Zdecydowanie kontynuowałbym dodając niektóre debugowanie logowania po stronie serwera do tutor_activities.php. Jeśli w ogóle zostanie wywołany, wywołanie go z wget w żaden sposób nie powinno mieć znaczenia. –

1

Jeśli PHP działa z linii/polecenia cron upewnij się umieścić pełną ścieżkę dostępu do pliku wykonywalnego php

1

Jest całkiem możliwe, że PHP nie znajduje się na ścieżce w środowisku cron - to na pewno nie będzie miał takie same skonfiguruj jako zwykłą powłokę. Spróbuj użyć ścieżki bezwzględnej zarówno do interpretera PHP i skrypt php w poleceniu cron:

* * * * * /path/to/php /path/to/test.php 

chodzi o tworzenie plików, po prostu trzeba dodać przekierowanie do polecenia wget:

wget -O - ... http://....  > /dev/null 

-O - zmusza wget, aby zapisał cokolwiek, co pobierze na standardowe wyjście, które cron następnie z przyjemnością wyśle ​​do ciebie e-mailem. Po dodaniu > /dev/null na końcu polecenia, wyjście to przejdzie w Great Bitbucket in the Sky. Jeśli nie chcesz, aby wysyłane przez wget dane wyjściowe były wysyłane pocztą e-mail, możesz również dodać 2&>1 po /dev/null, która dalej przekierowuje stderr na standardowe wyjście, które teraz przejdzie w/dev/null.

+0

+1. Użyj 'which php', aby znaleźć pełną ścieżkę do pliku wykonywalnego PHP. –

0

łatwy i bezpieczny (bez TMP pliki) sposobem, aby to zrobić jest użycie proces zastępowania atakujących za:

* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)" 

podstawienie Proces uruchamia komendę w ciągu <() i umieszcza dane wyjściowe do obiektu pliku, który jest widoczny tylko z bieżącego procesu. Aby użyć go z crona, wywołaj bash bezpośrednio i przekaż go jako ciąg polecenia.

I jak wspominali inni, użyj pełnej ścieżki do php, którą możesz znaleźć pod numerem which php.

7

spróbować

który php

drogi, która jest zwracany powinien być umieszczony z polecenia, który jest przekazywany do uruchomienia Cron file.If jesteś konfigurowania Cron przez Shell, to nie sprawi żadnego problemu, ale aby być pewnym, spróbuj podać absolutną ścieżkę, gdy próbujesz uruchomić stronę php.

/ścieżka/do/php/ścieżka/do/cron/script/

Spróbuj dać COMAND takiego, jeśli problem nie zostanie rozwiązany, nie krępuj się dyskutować.

Powiązane problemy