Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Harmonogram zadań w skrypcie php
bieniowa
post 13.07.2012, 08:56:01
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 12.02.2012

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


Witam,

Otóż w tym poście bardziej zwracam się z prośbą o opinię/pomysł niż o konkretne rozwiązanie. Tworzę sobie pewien projekt, w którym będę chciał odpalać cyklicznie poszczególne skrypty. Powiedzmy, że skrypt A chcę żeby uruchamiał się co 30 minut, skypt B co 1h, skrypt C co 2h. Mogę oczywiście ustawić 3 crony i będzie po sprawie. No ale właśnie w tym wszystkim chodzi mi o to jak zrobić, żeby odpalając 1 crona z częstotliwością powiedzmy co minutę skrypt potrafił rozpoznać czy jest coś do zrobienia czy nie.

Jaka Waszym zdaniem jest najlepsza metoda na osiągnięcie tego celu?

Pozdrawiam Serdecznie,
Grzegorz

Go to the top of the page
+Quote Post
PotasK
post 13.07.2012, 10:42:57
Post #2





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 25.04.2012

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


To zależy jakiego typu mają to być skrypty, ale chyba najłatwiej wykonywać sprawdzanie "czy jest coś do zrobienia" na początku każdego skryptu poprzez instrukcje warunkowe, np:

  1. if (!$warunek)
  2. {
  3. }
  4.  
  5. // Skrypt właściwy


Naprawdę, ciężej powiedzieć cokolwiek bardziej konkretnego.

Zamiast cron jobs można też utworzyć daemona na serwerze (to "dość" rozbudowany temat, wić nie będę się w niego zagłębiał tutaj, Google pokaże Ci podstawy).
Daemony są uruchamiane bezpośrednio na serwerze (z konsoli na przykład) i działają w tle non-stop, dzięki użyciu pętli. Dobrze jest także dodać opóźnienia czasowe, aby zmniejszyć obciążenie serwera i zużycie pamięci.

Ale to wszystko zależy od tego, co chcesz osiągnąć. Wjednym przypadku lepszy będzie daemon, w innym cron jobs. Zwykle przy własnych rozwiązaniach trzeba to sprawdzić samemu, które z nich jest bardziej wydajne.
Go to the top of the page
+Quote Post
markonix
post 13.07.2012, 11:38:45
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


W bazie przechowywać nazwę albo inny identyfikator funkcji (albo nazwy pliku), ostatnie wykonane i częstotliwość.
Wszystko w czasie unix. Jednym zapytaniem bez problemu można wyciągnąć nazwy skryptów odejmując time od `last_run` i wynik tego większy od częstotliwości.


--------------------
Go to the top of the page
+Quote Post
bieniowa
post 13.07.2012, 11:51:57
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 12.02.2012

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


Niestety nie chcę żeby program od razu wykonywał wszystko co ma do zrobienia, tylko, żeby to było rozłożone w czasie. Jedyne co mi przyszło do głowy to coś takiego:

- Cron odpala się co minutę. Skrypt ma odpalać się raz na 30 minut.
- Przy każdym odpaleniu Crona jakaś wartość w bazie zwiększa się o 1.
- Jeśli ta wartość wynosi 30 to skrypt się odpala, a wartość zamienia się znowu na 0.

Takie rozwiązanie zagwarantuje mi to, że skrypt będzie mniej więcej odpalał się co pół godziny. No, ale na pewno są jakieś mądrzejsze rozwiązania. Może coś z datą, czasem?
Jestem ciekaw czy da się zrobić coś takiego:

- Po odpaleniu skryptu zapisuje się data i godzina jego wywołania. Do tej daty dodawane jest pół godziny i następnie przy kolejnych uruchomieniach program sprawdza czy ta data już była czy jeszcze nie. Jeśli była to skrypt się wykonuje.



Ten post edytował bieniowa 13.07.2012, 11:55:36
Go to the top of the page
+Quote Post
markonix
post 13.07.2012, 12:00:28
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Rozwiń mój pomysł o proste LIMIT 1 w zapytaniu co zapewni wykonywanie tylko jednego zadania w momencie "kolizji".


--------------------
Go to the top of the page
+Quote Post
PotasK
post 13.07.2012, 12:01:00
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 25.04.2012

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


A nie łatwiej ustawić cron joba, żeby wykonywał się co pół godziny?

Mam na myśli to, że można ustawić kilka cron jobs.

Ten post edytował PotasK 13.07.2012, 12:01:48
Go to the top of the page
+Quote Post
markonix
post 13.07.2012, 12:11:33
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(PotasK @ 13.07.2012, 13:01:00 ) *
A nie łatwiej ustawić cron joba, żeby wykonywał się co pół godziny?

Mam na myśli to, że można ustawić kilka cron jobs.


Niepotrzebne, zaśmiecające, niewygodne, nieelastyczne i nie zabezpiecza przed kolizjami.
Jedyna zaleta to brak tego zapytania co minutę ale 1 lekkie zapytanie SQL raz na 60 sekund to żadne obciążenie.


--------------------
Go to the top of the page
+Quote Post
bieniowa
post 13.07.2012, 12:29:35
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 12.02.2012

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


Ok, mam już pomysł na rozwiązanie tego zagadnienia. Pomyślałem, że stworzę tabelę gdzie trafiać będą linki do skryptów, a także planowany czas jego wykonania. Po każdym uruchomieniu skryptu rekord z jego adresem będzie usuwany. Natomiast po zakończeniu skryptu do tabeli będzie trafiał kolejny link z nowym planowanym czasem. Muszę wziąć tylko na lekturę operacje na datach i godzinach. Póki co dziękuję za sugestie smile.gif
Go to the top of the page
+Quote Post
markonix
post 13.07.2012, 13:59:30
Post #9





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


A czym to się różni od mojego sposobu oprócz tego, że chcesz (chyba) ustalać konkretne godziny co jest głupim pomysłem, bo nie przyjmujesz pod uwagę awarii, wykonujesz niepotrzebne zapytania i obliczenia na datach. No i co to znaczy "link" do skryptu?


--------------------
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: 16.07.2025 - 02:31