Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak ominąć maksymalny czas wykonywania skryptu, Dokładniej, żeby to ominięcie działało w cronie.
Asver
post 17.06.2010, 19:38:34
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.06.2010

Ostrzeżenie: (0%)
-----


Witam.
Na wstępie - wiem że na tym forum jest kilka tematów z tym związanych, jednak nie mogę znaleźć żadnego, choć nie mało wiedzy z nich zaczerpnąłem wczoraj w nocy.

Zrobiłem sobie skrypcik do sprawdzania pozycji słów kluczowych wielu stron, ich site w google, ilości linków w yahoo, sprawdzania czy dodane wpisy w katalogach istnieją i czy są zaindeksowane, wpisuje to wszystko to ładnej bazy danych, ja sobie moge z panelu to wyświetlać w fajnych tabelkach... ogólnie robi za mnie masę roboty.
Żeby nie obrazić G. masą zapytań jakie ślę do niego, po każdym zapytaniu robię sleep(3). To implikuje problem przekroczenia maksymalnego czasu działania skryptu. Rozwiązałem wstawiając metatag refresh który odświeża skrypcik żaglując parametrami w linku.
Wszystko działa tak pięknie, że aż łzy mi do oczu nabiegają ze szczęścia, jednak do jego pełni pozostaje jeden szkopuł - aby skrypcik wywoływany był codziennie
bez udziału mojej woli.

Ku mojej rozpaczy, wklepanie do crona powoduje jeno jednorazowe wykonanie skryptu, bez odświerzania....

Proszę o radę, jak to zrobić, aby w cron uruchamiał skrypcik i ten leciał aż się nie skończy...

Go to the top of the page
+Quote Post
Wave
post 17.06.2010, 19:50:37
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

Ostrzeżenie: (0%)
-----


w shellu nie masz metatagów.
nieskończona pętla while(1) { } i sleep(3000) - 3 sekundy ?
no i set_time_limit(0);

Ten post edytował Wave 17.06.2010, 19:54:42
Go to the top of the page
+Quote Post
Asver
post 17.06.2010, 19:57:48
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.06.2010

Ostrzeżenie: (0%)
-----


Cytat(Wave @ 17.06.2010, 20:50:37 ) *
w shellu nie masz metatagów.

Przeczuwałem tą odpowiedź....

Cytat(Wave @ 17.06.2010, 20:50:37 ) *
nieskończona pętla while(1) { } i sleep(3000) - 3 sekundy ?

Sleep(3) - to są 3 sekundy. Jest jeszcze usleep w mikrosekundach, ale nie jest mi potrzebny raczej...
A co do nieskończonej pętli, to czy przypadkiem w cronie też nie ma ograniczeń czasowych wykonywania skryptu? W ogóle się na tym całym cronie, powłoce itd nie znam... :/
Cytat(Wave @ 17.06.2010, 20:50:37 ) *
no i set_time_limit(0);

Nie mam dostępu do ustawień php.
Go to the top of the page
+Quote Post
Spawnm
post 17.06.2010, 20:01:53
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




set_time_limit(0); nie dajesz w ustawieniach php tylko na początku kodu , zobacz w manualu smile.gif
Go to the top of the page
+Quote Post
thek
post 17.06.2010, 21:04:17
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Jeśli masz dostęp do cron to w zasadzie nie masz problemu. Cron to harmonogram zadań. Jeśli ustawisz mu wykonywanie się co minutę (najmniejszy możliwy odstęp czasowy dla zadań cron) - będzie wykonywał skrypt co minutę. Wtedy nawet limit czasu na 30 sekund nie będzie uciążliwy.
Co do set_time_limit(0) to ustawia się to na starcie skryptu. Jeśli jednak ma całość chodzić w kółko, to jest rozwiązanie jedno, ale średnio bezpieczne. Wywoływanie skryptu rekurencyjnie. Uruchamiasz skrypt, robisz coś, każesz mu wywołać samego siebie a pierwszego killujesz. Po drodze możesz ustawić sleepa jakiego chcesz i oczywiście user aborta musisz odpowiednio ustawić. Dzięki temu proces będzie wiecznie działał. Dzieje się tak, ponieważ wywołanie potomne nie jest zależne od poprzednika jeśli dobrze sprawę przemyślisz i zakończenie exitem rodzica nie wpływa na potomka, który w tym czasie mógł wywołać już nawet swoje kolejne "dziecko". To są jedne z "niebezpiecznych" wariantów skryptów, gdyż nie działa na nie nic innego jak ubijanie z poziomu konsoli. Inaczej nie da się ich zatrzymać. Stąd pisanie takich należy mocno obwarować warunkami wykonywalności, dobrze wszystko przemyśleć i jednak co jakiś czas zatrzymywać oraz dać "odpocząć" serwerowi by za choćby 2-3 minuty znów go cronem wywołać. Są to świetne do działań w tle skrypty, ale potrafią "zabić" serwer, jeśli są pisane bez przemyślenia.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Asver
post 17.06.2010, 21:51:34
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.06.2010

Ostrzeżenie: (0%)
-----


Ustawiłem sobie w pętli po sleepie set_time_limit(30) - śmiga, brzęczy i się błysko w cronie.
Coś nie chce mi się wierzyć jednak, aby to wystarczyło kiedy baza rozrośnie mi się do porządnych rozmiarów.
Puki co działa idealnie - dzięki.

Co do "wiecznego skryptu" - mega ciekawa i intrygująca koncepcja. Ale tak "wieczne" działanie, jak i wywoływanie co 10 min non-stop, nie są potrzebne - jedno sprawdzenie na dzień w zupełności wystarczy a z 4 sekundowym sleepem jestem w stanie w ciągu 24h sprawdzić grubo ponad 15k słów kluczowych, w zupełności mi wystarczy.
Go to the top of the page
+Quote Post
thek
post 17.06.2010, 22:14:53
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Bo rozwiązania dopasowuje się zawsze do sytuacji. W większości przypadków prostych limit czasu to aż nadto. Gdy to nie wystarcza to cron najczęściej daje radę. Gdy niestety z jakichś przyczyn nie możemy sobie pozwolić na cronjobs (provider nie udostępnia, lub można je "rzadko" (rzadko jak dla naszych potrzeb winksmiley.jpg ) wywoływać to trzeba kombinować już na inne sposoby. A to set_time_limit, a to rekurencyjne wywołania będące okrojoną wersją tych "wiecznych", a to znów jakieś miksy z posyłaniem zadań do shella (konsola ma wyższy priorytet) smile.gif
Tu kłania się bardziej pomysłowość, znajomość różnych rozwiązań, funkcji i szczypta bezczelności winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Asver
post 25.06.2010, 21:19:12
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.06.2010

Ostrzeżenie: (0%)
-----


Emm.... skrypcik śmiga cały czas. Jedno mnie martwi - choć mam w kodzie sleep(4) przy sprawdzeniu każdego z ok. 100 słów, sprawozdanie crona otrzymuje na maila w tej samej minucie w której skrypt ma się załączać.... - sleep nie działa w cronie czy co?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 09:59