![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 163 Pomógł: 2 Dołączył: 7.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Czy jest jakakolwiek możliwość uruchomienia pliku php co 30s bez włączonego kompa - na hostingu? Bo w corn da się minimalnie co 1min.. corn nie spełnia moich wymagań (od 1min). Dokładnie potrzebne mi coś takiego, ze jak skrypt spełni jakiś tam warunek to żeby uruchamiał inny skrypt co 30s w określonym czasie. Musi się dać coś takiego zrobić. Tylko nie wiem jak;/ Bardzo proszę o pomoc. Z góry dzięki. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Odpalasz skrypt raz i robisz w nim nieskończoną pętlę. W niej uruchamiasz ten drugi skrypt. Mierzysz czas jego działania. Następnie usypiasz skrypt na 30 - czasWykonywniaSię sekund. Problem mógłby się pojawić jeżeli ten drugi skrypt mógłby się wykonywać więcej niż 30 sekund, a wymagane byłoby bezwzględne uruchamianie co 30 sekund - niestety PHP jest jednowątkowy, więc ominięcie tego mogłoby być problematyczne.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Uruchom sobie ten kod i zobacz co dostaniesz w wyniku:
Skrypt chodzi przez 30 sekund i dokonuje przestoju na 5 sekund po każdym przebiegu. Jeżeli jako limit czasowy dasz 60, a jako przestój 30 to uzyskasz to, co chcesz. wszystko ładnie i pięknie ale... no błędy się zdarzają ;) - dobrze nakierowujesz ale sam tego skryptu nie uruchomiłeś ;)... skrypt będzie się wykonywał 30 sekund, ale "pracował" o wiele dłużej ;), sleep wstrzymuje wykonywanie skryptu o zadaną ilość sekund (usypia go) - z gostkiem się umówiłeś, że za 10h pracy zapłacisz mu tyle a tyle, on się zmęczył i chce się zdrzemnąć ;) - swoje potem musi odpracować ;) [głupi przykład ;p]... i tu właśnie podaje się w sleep parametr po jakim czasie skrypt coś ma zrobić - odnośnie tematu... [pasuje sobie liczyć ile w sumie skrypt "spał" i odejmować od całości czasu by znać czas kiedy się zakończy by samemu go zakończyć a nie padł na zawał i nie po dokańczał niektórych procesów - ale do tego wrócę o co mi chodzi ;) ...niestety PHP jest jednowątkowy, więc ominięcie tego mogłoby być problematyczne... więc trzeba odpalić kolejne wątki ;) - w sumie to nie takie trudne - ale pasuje pomyśleć jak nad nimi zapanować ;)... ok... jak odpalić kolejny wątek?? - albo skrypt którego nie chcemy potem nadzorować - wiemy że go uruchomiliśmy i to nam wystarczy (w tamtym skrypcie uruchomionym można zadbać o komunikaty choćby do pliku o wykonaniu "misji")... jest funkcja ignore_user_abort, która nam trochu może pomóc - a czy przy zerwaniu połączenia przez skrypt jest konieczna to nie pamiętam ;p - dawno jeden test zrobiłem - taki mały cron ale z poziomu php który odpalał sam siebie gdy zbliżał się do "śmierci" i po drodze wykonywał inne operacje - akurat pierwsza wersja była odpalana z przeglądarki i limity ustawione były tak, by było widać procesy i zmiany w nadpisywanych plikach okresowo, potem skrypt sam siebie i inne uruchamiał - i w jednym miejscu miałem zonka bo procesów się narobiło ^^ (ale odbiegam od tematu - wracajmy)... jeszcze nie wymieniłem wszystkich potrzebnych funkcji ale wcześniej... jak się pomysli kiedy proces sam siebie ma zlikwidować można iść na przód i... (to było robione w celach "edukacyjnych" - może mi się kiedyś przyda - i pewnie dało się lepiej to obmyśleć ale mi chodziło tylko o ideę czy się da ;p) jest potrzebna np funkcja fsockopen - przy jej pomocy pobierzemy same nagłówki skryptu który chcieliśmy uruchomić i od razu zamykamy połączenie ;) - lub pierwszy znak - chcemy tylko odpowiedź - wady - adres musi być http lub inny ale pełny ;p... dylematy i pytania?? ale zanim dostaniemy odpowiedź drugi skrypt swoje musi zrobić - czy musimy czekać aż się cały wykona?? nie ;) ustawiamy odpowiedź na początku, nagłówki z close (jeśli ktoś chciałby przez przeglądarkę zainicjować) i wysyłąmy odpowiedź zanim skrypt skończy się wykonywać - zanim zacznie się robić to co on miał zrobić... tu taki głupi przykłąd skryptu który wysyła odrazu "bzdurną" odpowiedź:
a przykładu z fsockopen to chyba nie muszę pokazywać ;p - choć jeśli chcecie to prościej będzie curl ;p - równie dobrze można file_get_contents ;p UP @phpion - właśnie kończę pisać posta a w skrypcie na tyle często jest to sleep, że on dalej "pracuje" - a raczej "leniuchuje" bo od razu odpoczywa ;) - ale ideę słuszną pokazałeś ;) ps. nie może to być nieskończona pętla ;) - trzeba kontrolować zakończenie skryptu bo jeśli on jest naglę przerywany z powodu przekroczenia czasu wykonywania to niejednokrotnie nie zakończy kilku rzeczy i może być co innego niż my się spodziewaliśmy przy ostatniej dostępnej a przerwanej pętli... pasuje zliczać czas wykonywania ze sleep, gdzieś podawać na zewnątrz "kontrolkę" np do pliku, że skrypt dalej chodzi i uruchomi się np. o tej i tej - więc próba uruchomienia jego kopii np. przed ta godziną niech po prostu zakończy działanie skryptu i inne "pierdułki" - i tym oto sposobem można napisać pseudo crona w samym php ;) - nadzorowanego np. dodatkowo jeszcze przez crona czy coś nei wyłączyło działania naszego skryptu... a i ważne - pasuje dać jeszcze w skrypcie jakąś kontrolkę dzięki której moglibyśmy przerwać działanie skryptu ;p... np tworząc jakiś plik ;) - po prostu niech skrypt sprawdza czy plik jest czy go nie ma - jak jest lub w drugą stronę - od upodobań - to niech się wyłączy ;) to jest takie obejście na "około" ale jakby nie było na przeprowadzonych testach działało... w tym temacie podajecie lepsze rozwiązania niż kiedyś widziałem temat o uruchamianiu co 5s albo coś w stylu crona w php -widziałem coś w stylu samego while(true){coś rób} bez sleep - przecie to by zżarło maszynę ;p i podsumowanie: Uruchom sobie ten kod i zobacz co dostaniesz w wyniku:
Skrypt chodzi przez 30 sekund i dokonuje przestoju na 5 sekund po każdym przebiegu. Jeżeli jako limit czasowy dasz 60, a jako przestój 30 to uzyskasz to, co chcesz. jeśli tak to ma być... ...to raczej powinno być tak:
a wyżej podałem bez szczegółów ogólnikowo przepis na coś ala cron ale w php ;) Ten post edytował zegarek84 23.01.2010, 04:04:30 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 13:58 |