Temat: PHP i kod zadań w kalendarzu i powiadamianie
Artur Świerc:
Robert Waligórski:
Chodzi mi bardziej ze ustawiam np. zdarzenie np. na 20 czerwca i np. przed 10 min. za nim pojawi sie zdarzenie wyśle sms.
Tutaj musisz użyć cron'a, który będzie chodził w tle i sprawdzał czy może już wysyłać jakieś zdarzenia. Tzn możesz zrobić tak jak Ci pisałem, skrypt z while - nie musisz wtedy puszczać crona co minutę, tylko co jakiś czas, żeby sprawdzał czy skrypt nie umarł.
Z cronem co minutę pojawia się prawdopodobieństwo, że taki skrypt zje bardzo dużo zasobów. Związane jest to z tym, że nie wiesz ile będzie się wykonywał skrypt jeśli zdarzeń będzie bardzo dużo. Być może cron odpali następny, zanim poprzedni się skończy i tak w kółko. Oczywiście mógłbyś użyć jakiś semafor - np tworzyć plik na dysku i uruchamiać skrypt jedynie wtedy gdy tego pliku niema, ale tutaj znów masz problem z pominiętymi rekordami o którym pisałem wcześniej.
CRON co 1 min + plik na dysku to sensowne rozwiązanie. Sam wykorzystuję w kilku projektach.
1. CRON odpala skrypt
2. Sprawdzamy, czy nie istnieje plik sms.lock
3. Nie istnieje -> tworzymy, istnieje -> koniec skryptu
4. Pobieramy dane o znaczniku wyslanoSMS=0 (lub o dowolnym innym warunku, który tylko raz może być spełniony)
5. Wysylamy SMS, aktualizujemy DB
6. Kasujemy plik sms.lock
Jedyny problem, jaki może się pojawić, to nieoczekiwane przerwanie skryptu i pozostawienie pliku sms.lock... Skrypt zatem należy napisać tak (+tak skonfigurować środowisko), aby nieoczekiwanie nie przerwał swego działania (timeout, etc.).
Można też napisac drugi skrypt i walnąć go do CRONA: sprawdzamy, czy kolejka jest większa od 0, a jeśli tak, czy co minutę ulega jakimkolwiek zmianom. Jeśli nie - usunąć plik sms.lock + alert mailem do admina.
Takie luźne przemyślenia, ale myślę, że warto spróbować zagłębić się w temat...
Michał S. edytował(a) ten post dnia 01.06.10 o godzinie 00:50