Prosty CRON


(northwest) #1

Witam serdecznie,

chciałem dodać zapytanie CRON takie, które będzie mi wywoływało określoną stronę co 5 minut (przez całą dobę).

Kombinuję z czymś takim:

5 * * * * wget: http://127.0.0.1:8080/test.php

ale niestety nie chce mi się wykonywać :frowning: co robię nie tak?

Wie ktoś może??

Z góry dziękuje za pomoc,

North :slight_smile:


(ra-v) #2
5 * * * * wget http://127.0.0.1:8080/test.php

Zbędny :


(Copycona) #3
  1. Ten kod nie będzie się wykonywał co pięć minut, tylko pięć minut po każdej pełnej godzinie, np. 20:05, 21:05 itd.

  2. Po co Ci ten dwukropek przy wget? W składni tego nie ma. Jest on tam niepotrzebny.

  3. Skoro to plik lokalny nie lepiej wykonać ten kod także bezpośrednio?

  4. Chyba lepiej podać pełną ścieżkę do pliku binarnego (możesz sprawdzić przy użyciu polecenia which lub whereis).

Przykładowo proponuję taki wpis:

*/5 * * * * /usr/bin/php -f /home/pewienuser/public_html/jakisplik.php[/code]

Tak powinno być, aby wykonać coś co określony odstęp czasu (minut), w tym przypadku pięć minut. Zadanie jakie zostanie wykonane to uruchomiony interpreter php, który wykona plik, do którego została wskazana ścieżka (najlepiej bezwzględna, właściwie to nawet nie wiem w przypadku relatywnej względem czego by ona miała być).


(ra-v) #4

/usr/bin/php skrypt.php czasem powoduje pewne kłopoty np. pusty $_SERVER['HTTP_HOST'] albo brak innych zmiennych globalnych. wget działa jak przeglądarka.


(Copycona) #5

wget pobierze (zapisze) też zupełnie niepotrzebnie plik. To może lepiej użyć przeglądarki lynx, zamiast czegoś co "zadziała jak przeglądarka".

/usr/bin/lynx --dump http://127.0.0.1:8080/test.php  [/code]

W takiej opcji strona zostanie wyświetlona na wyjściu standardowym, czyli w zależności od konfiguracji w praktyce nie trafi nigdzie, lub zostanie wysłany wynik na adres e-mail. Zawsze można przekierować wynik na /dev/null, czy też inny plik - log.


(northwest) #6

kurcze,nie działa żaden przyklad :frowning:

mam to: http://www.fun2code.de/download.html PAW Server, mam włączoną opcję crona... (widzę z logach że startuje poprawnie)...

mam takie crony:

Cron Format:

field allowed values

----- --------------

minute 0-59

hour 0-23

day of month 1-31

month 1-12 (or names, see below)

day of week 0-7 (0 or 7 is Sun, or use names)

command Shell command

*/1 * * * * php http://127.0.0.1:8080/app/test/importfotek.php

*/1 * * * * wget http://127.0.0.1:8080/app/test/importfotek.php

*/1 * * * * wget /usr/bin/php -f /sdcard/paw/html/app/test/importfotek.php

*/1 * * * * wget /usr/bin/php -f /paw/html/app/test/importfotek.php

ale żaden nie startuje :frowning:

-- Dodane 14.02.2012 (Wt) 22:27 --

śmiga na tym wszystko (php itp). Znalazlem taką informację:

EXAMPLE CRON FILE

use /bin/bash to run commands, instead of the default /bin/sh

SHELL=/bin/bash

mail any output to `paul', no matter whose crontab this is

MAILTO=paul

run five minutes after midnight, every day

5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1

run at 2:15pm on the first of every month -- output mailed to paul

15 14 1 * * $HOME/bin/monthly

run at 10 pm on weekdays, annoy Joe

0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%

23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"

5 4 * * sun echo "run at 5 after 4 every sunday"

może trzeba to wywołać poprzez te pliki sh/jon?


(Copycona) #7

Ja Ci powiem dlaczego nie startuje, bo żaden ten wpis nie jest prawidłowy :slight_smile:

Użycie jednocześnie wget i interpretera php jest bez sensu. Te programy w żaden sposób się tak nie łączą.

Masz następujące opcje:

*/5 * * * * /usr/bin/php -f /sciezka/ktora/ustalisz/do/pliku.php[/code]

[code=php]*/5 * * * * /usr/bin/lynx --dump http://127.0.0.1:8080/sciezka/do.php      

*/5 * * * * /usr/bin/wget http://127.0.0.1:8080/sciezka/do.php      [/code]
  1. Uruchomi program - interpreter php z parametrem, który karze mu wykonać plik wskazany przez Ciebie.

  2. Uruchomi przeglądarkę tekstową lynx, która otworzy adres strony wskazany przez Ciebie.

  3. Uruchomi program wget, który pobierze plik ze ścieżki podanej przez Ciebie. Skutek dla serwera będzie taki, jak wykonanie z przeglądarki.

Musisz ustalić ścieżkę do tych plików binarnych - uruchamianych programów. Możesz to zrobić przy użyciu poleceń which i whereis.

Jeżeli byś chciał wykorzystać przykład pierwszy musisz ustalić prawdziwą ścieżkę bezwzględną do tych plików php. Możesz w terminalu wykorzystać pwd, lub funkcję php realpath()

edit:

Sprawdziłem, że wget posiada wiele sprytnych parametrów, które mogą się przydać. Jeżeli być chciał go użyć, warto wybrać jakąś kombinacje, która nie będzie niepotrzebnie zapisywała pliku.

Na przykład:

http://serverfault.com/questions/73163/ ... e-the-page

łącząc to z wpisem w cron:

*/5 * * * * /usr/bin/wget --no-cache --spider http://127.0.0.1:8080/sciezka/do.php   [/code]

(northwest) #8

najbardziej podoba mi się to:

*/5 * * * * /usr/bin/wget http://127.0.0.1:8080/sciezka/do.php :slight_smile:

czyli to wklejam do tego CRONTABa, tak?:slight_smile:

-- Dodane 14.02.2012 (Wt) 22:44 --

niestety to też nie dziala :frowning: może mój system nie ma "wget"?


(Copycona) #9

Tak, to masz dopisać ... albo nie, znaczy prawie. Edytowałem swój poprzedni post. Sprawdź dodaną zawartość.


Wpisz w konsoli:

wget --version[/code]

Jeżeli jest informacja o wersji - masz wget, nie ma - nie masz.

Jeżeli masz, jego ścieżkę do niego poznasz wpisując:

[code=php]which wget

whereis wget[/code]

edit: Dobra, ja nie wiem jak działa "PAW Server for Android" i co Ci dalej bym mógł pomóc.


(northwest) #10

chyba nie mam wgeta:(

Parse error at line 1, column 8. Encountered: version - to mi zwraca :frowning: