![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 1 Dołączył: 10.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Ostatnio napisałem skrypt, który dodaje newsy co 3 dni o 12.00
Oczywiście musiałem dodać to do crona. Jednak nie działa to tak jak chce. Zauważyłem, że w PHP jest ciekawa funkcja SLEEP. Chciałbym dowiedzieć się jakie ona ma wady. Jeśli dałbym taką pętlę
Czy działało by to podobnie do crona? (zakładając, że uruchomiłbym skrypt o 12.00) Jeśli $wartość jest pobierana z pliku to czy gdy w czasie pracy skryptu podmienię plik i zmienię treść zmiennej wartość to czy PHP będzie wrzucać do mysql wartość która jest podana w czasie uruchomienia skryptu czy tą nową? Ten post edytował xamrex 18.08.2010, 14:40:58 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Sleep sobie może działać, ale zwróć uwagę, że istnieje coś takiego jak maksymalny czas wykonania skryptu. Możesz zatrzymać jego wykonanie na jakiś czas funkcją sleep, ale nie jest to liczone w dniach. Takie rozwiązanie nie zadziała po prostu.
-------------------- 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
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 1 Dołączył: 10.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, zauważyłem, że ostatnio często mi pomagasz
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Maksymalny czas wykonywania skryptu oczywiście można wyłączyć poprzez ustawienie go na 0 i po kłopocie.
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak jak zauważył już @wookieb maksymalny czas wykonywania skryptu to nie przeszkoda, ale:
1. Wartość dla sleep powinna być obliczania dynamicznie. Obecnie jeżeli kod zawarty w pętli wykonuje się 25 sekund to pierwsze wywołanie odbędzie się o 12:00:00, następne o 12:00:25, następne 12:00:50, następne 12:01:15 itd. 2. Ten sposób jest do granic możliwości niewygodny. Serwer na sekundę padnie - potrzeba od nowa włączać skrypt. Chcesz coś zmienić w skrypcie - potrzeba od nowa go włączać. No i najważniejsze pytanie: co Ci w cronie nie działa tak jabyś chciał? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Maksymalny czas wykonywania skryptu oczywiście można wyłączyć poprzez ustawienie go na 0 i po kłopocie. jak to był raz jeden temat gdzie dowodziłem, że nie trzeba zmieniać maksymalnego czasu wykonania by sleep ustawić na np 1 godzinę - nawet podawałem linki do manuala, gdzie pisało, że to nie żaden bug a bugiem jest to jak reaguje na niego windows [gdzie sleep jest wliczany do czasu wykonywania]... co nie znaczy, że na innych systemach skrypt będzie działał w nieskończoność - fakt, że sleep tam nie jest wliczany do czasu wykonywania skryptu ale i procesor nie jest obciążony - gdy idzie dalej skrypt i jest np while(true) to to się maksymalnie wykona 30sekund [no chyba, że zmienimy ustawienia]...coby sobie na bazie tego pseudo crona zrobić pasuje jeszcze zainteresować się funkcjami typu ignore_user_abord [jakoś tak się zwie] i czas wyliczać dynamicznie, gdzieś zapisywać co jakiś czasz, że skrypt działa coby móc kontrolować w tle [oderwany proces] i i jeszcze zaplanować, jak długo może maksymalnie skrypt nie dawać znaku życia - jeśli żyje procesu nie uruchamiamy, jak padnięty to odpalamy od nowa... oczywiście wartość pod sleep powinno wyliczać się dynamicznie... cron+sleep daje sporo możliwości.... a jeśli chcemy pozbyć się crona to pasowało by by na różnych serwerach monitorowały się skrypty i w razie potrzeby by ożywał taki proces... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
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 ![]() |
Owszem... Można ustawiać czas wykonania na 0, ale tylko gdy możesz go modyfikować poprzez dyrektywy lub funkcje php. A przecież nie wszystkie hostingi na to pozwalają tak jak nie na wszystkich jest dostępny cron, albo ma on limity w stylu raz na ileś minut.
To co wspomniał zegarek jest prawdą, ale tylko w przypadku windowsa i znów manual tutaj wyjaśnia to. Jedynie windows tak reaguje, że nie liczy czasu w uśpieniu do całkowitego czasu wykonywania. Najbezpieczniejszy wariant to użycie crona, a jeśli działania mają być częstsze niż minuta, to wspomniane uruchamianie skryptu i jego kontrola poprzez cron. -------------------- 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
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
To co wspomniał zegarek jest prawdą, ale tylko w przypadku windowsa i znów manual tutaj wyjaśnia to. Jedynie windows tak reaguje, że nie liczy czasu w uśpieniu do całkowitego czasu wykonywania... sprostowanie: pisałem ale inaczej - właśnie to w Windowsie czas uśpienia jest wliczany do całkowitego czasu wykonywania, na innych systemach nie...przykład: na linux'ie maksymalny czas wykonywania skryptu wynosi 30s i nie mamy możliwości zmieniania tej wartości, skrypt wykonałby się w ułamku sekundy ale potrzebujemy, by pewną operację wykonał w dokładnie odliczonym czasie [zastosowanie - np. boty do jakiejś gry np. www], z obliczeń wynika, iż dana akcja ma być dopiero za 2min i 10s [czas ten obliczyliśmy na początku]... przekazujemy funkcji sleep coby reszta skryptu wykonała się po obliczonym czasie [ja preferuję tutaj oderwanie procesu od reszty i inny skrypt mógłby czuwać nad całością]... i reszta operacji jest wykonywana po tym czasie - za błąd było podawane, że skrypt wykonywał się 2min 10sekund i troszkę faktycznego czasu wykonywania skryptu przed i po sleep - podczas gdy w manualu jest wyjaśnione, że czas sleep nie jest błędem a błędem jest to, że windows przerwie taką operację wliczając do czasu wykonywania skryptu... // EDIT choć raz na pewnym hostingu dokładnie nie było wyjaśnione jak jest liczone obciążenie procesora [w kontekście sleep i manuala], niby przez czas wykonywania skryptu ale jak to tam liczyli nie było napisane - dla pewności zapodałem tam kilka skryptów i zadałem pytania - szczerze sama obsługa była zdziwiona, że skrypt został naliczony na ułamek sekundy podczas gdy wynik na ekranie widzieli co 10s [mimo iż wcześniej wszystko dokładnie tłumaczyłem] - oczywiście wynik był dla mnie satysfakcjonujący i jeszcze raz objaśniałem im, iż to nie jest błąd i podawałem różne linki także do manuala i do bugów [gdzie napisane jest, że to nie jest bug - bugiem jest to jak na windows proces jest przerywany] Ten post edytował zegarek84 19.08.2010, 10:11:24 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Mój błąd. Źle odczytałem i zegarek84 ma rację. Manual set_time_limit w wolnym tłumaczeniu:
Cytat Funkcja set_time_limit() function dyrektywa konfiguracyjna max_execution_time wpływają jedynie na czas wykonywania samego skryptu. Czas będący aktywnością poza nim jak wywołania systemowe z użyciem system(), operacje na strumieniach, zapytania do bazy danych, itd. nie jest wliczany do maksymalnego czasu wykonywania się skryptu. Nie jest to prawdą dla Windows, który oblicza czas realny. A co do sleep i usleep na windzie, to w jednym z komentarzy było podane, że mają pewną niedogodność. Jeśli set_time_limit jest ustawione na coś więcej niż 0 to potrafią zeżreć 50% mocy procka.
-------------------- 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
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.05.2025 - 05:11 |