konto usunięte

Temat: PHP a zaplanowane zadania.

Witam wszystkich. W najświeższym zleceniu jednym z jego kluczowych elementów ma być możliwość ustawienia przez użytkownika remindera tak, by w danym dniu o danej godzinie system wysłał e-mail z powiadomieniem o zaplanowanym zadaniu.
I tutaj moje zapytanie: jak zrealizować taką funkcjonalność z poziomu PHP? Wiadomym jest - by dany kod został wykonany musi być wywołany skrypt - przez użytkownika. Nie zawsze skrypt ten będzie mógł być uruchomiony - i wysłać reminder. Podejrzewam, że trzeba skorzystać z crona i jakoś związać to z oskryptowaniem. Czy są do tego jakieś gotowe moduły? Mogę sam napisać silnik takiej funkcjonalności, problem w tym, że nie wiem co ugryźć :-).
Pozdrawiam.Jakub Świegot edytował(a) ten post dnia 20.06.07 o godzinie 09:46
Bartosz Olchówka

Bartosz Olchówka Chief Product
Officer at LiveChat

Temat: PHP a zaplanowane zadania.

Skorzystaj z crona w systemach Uniksowych i po prostu co jakiś czas odpalaj skrypt remindera. Na temat crona mnóstwo informacji posiada google :).
Łukasz A.

Łukasz A. Webdeveloper (php)

Temat: PHP a zaplanowane zadania.

Możliwe jest też stworzenie pseudo-crona który przy każdym wywołaniu strony Twojego serwisu sprawdzałby czy 'już czas' - i jeżeli tak, wysyłał maile.
Niestety - jeżeli na www nie ma dużego ruchu, nie ma gwarancji wysłania wiadomości o podanej godzinie (jedynie przy pierwszej okazji po jej upłynięciu).

BTW, funkcjonalność bardzo podobna do kalendarza google, może warto byłoby się podczepić pod ich API ? Sam korzystam z ich powiadomień sms.Łukasz A. edytował(a) ten post dnia 20.06.07 o godzinie 13:04

konto usunięte

Temat: PHP a zaplanowane zadania.

Również myślałem o pseudo-cronie, lecz niestety nie jest to dobre, ani profesjonalne rozwiązanie. Google.. też jakiś pomysł, ale średnio mi się podoba. Myślę, że będę jednak dodawał zadania exec()'kiem do crontaba.
Karol Traczykowski

Karol Traczykowski Head of New Ventures
@ ZnanyLekarz.pl

Temat: PHP a zaplanowane zadania.

[author]Jakub
Jakub L.

Jakub L. Programista

Temat: PHP a zaplanowane zadania.

Jeżeli to twój serwer, i nie zależy ci na dokładności co do sekundy, możesz wstawić do crona skrypt który zapyta bazy, czy jest coś do wysłania o tej godzinie (select * from todo where when <= now()), a z PHP wkładać do bazy zadania.
Andrzej Zawadka

Andrzej Zawadka
Projektant/Programis
ta

Temat: PHP a zaplanowane zadania.

Ja to zawsze robiłem z crona i działa to dobrze. W crontabie użytkownika który ma wystarczające prawa do plików, ustawiasz wywołanie polecenia "php /sciezka/skrypt.php". Gdzie:
- php to parser przetwarzający skrypty php na poziomie shela, powinneś go mieć w systemie o ile oczywiście zainstalowałeś odpowiednie pakiety.
- /sciezka/skrypt.php to ścieżka do skryptu (razem z jego nazwą) który ma być przetworzony przez parser php.
Trzeba oczywiście pamiętać że przy takim sposobie przetwarzania skrypt jest przetwarzany przez powłokę na prawach użytkownika którego cron go wywołał, oraz że wyniki "echo 'costam';" idą na aktywną powłokę czyli w tym przypadku (wywołanie z crona) w niebyt, więc wszelkie wyniki warto wyrzucać albo do logu systemowego albo do własnego pliku logu.Andrzej Zawadka edytował(a) ten post dnia 22.06.07 o godzinie 08:45

konto usunięte

Temat: PHP a zaplanowane zadania.

Andrzej Z.:
Ja to zawsze robiłem z crona i działa to dobrze. W crontabie użytkownika który ma wystarczające prawa do plików, ustawiasz wywołanie polecenia "php /sciezka/skrypt.php". Gdzie:
- php to parser przetwarzający skrypty php na poziomie shela, powinneś go mieć w systemie o ile oczywiście zainstalowałeś odpowiednie pakiety.
- /sciezka/skrypt.php to ścieżka do skryptu (razem z jego nazwą) który ma być przetworzony przez parser php.
Trzeba oczywiście pamiętać że przy takim sposobie przetwarzania skrypt jest przetwarzany przez powłokę na prawach użytkownika którego cron go wywołał, oraz że wyniki "echo 'costam';" idą na aktywną powłokę czyli w tym przypadku (wywołanie z crona) w niebyt, więc wszelkie wyniki warto wyrzucać albo do logu systemowego albo do własnego pliku logu.

Dzięki, ale to akurat wiem, zastanawiam się tylko jak najefektywniej dokonać wpisu do crontaba, skoro exec() nie zawsze jest odblokowany, a skrypt, który tworzę musi pracować niezawodnie na kilku komercyjnych hostingach, na wybór których nie mam wpływu.
Michal Oczak

Michal Oczak sysadmin/webdev

Temat: PHP a zaplanowane zadania.

po co ci exec()? chcesz dynamicznie dodawac wpisy do crontaba? nie lepiej miec jeden skrypt wykonywany z crontaba i w nim konfigurowac operacje np pobierac z bazy czy pliku konfiguracyjnego co i kiedy robic?

konto usunięte

Temat: PHP a zaplanowane zadania.

Michal O.:
po co ci exec()? chcesz dynamicznie dodawac wpisy do crontaba? nie lepiej miec jeden skrypt wykonywany z crontaba i w nim konfigurowac operacje np pobierac z bazy czy pliku konfiguracyjnego co i kiedy robic?

LOL. Oczwyście, że tak zamierzam zrobić, lecz najpierw
Michal O.:
lepiej miec jeden skrypt wykonywany z crontaba i w nim

Trzeba jakoś dodać tę jedną linijkę, prawda?
Michal Oczak

Michal Oczak sysadmin/webdev

Temat: PHP a zaplanowane zadania.

totez trzeba sie dowiedziec w firmie hostingowej jak to zrobic jesli w ogole to umozliwiaja, ja znam rozwiazania typu opcja w panelu hostingowym lub kontakt z pomoca techniczna i robi to sam admin, pomijam posiadanie dostepu do shella

konto usunięte

Temat: PHP a zaplanowane zadania.

Michal O.:
totez trzeba sie dowiedziec w firmie hostingowej jak to zrobic jesli w ogole to umozliwiaja, ja znam rozwiazania typu opcja w panelu hostingowym lub kontakt z pomoca techniczna i robi to sam admin, pomijam posiadanie dostepu do shella

Ano. Panel administracyjny nie zawsze umożliwia takie rzeczy, pomoc techniczna to chyba jedyne dobre i skuteczne rozwiązanie, w przypadku braku dostępu do powłoki i funkcji shell_exec()/exec().

Pozdrawiam.
Maciej W.

Maciej W. a czy ty masz swój
ręcznik?...

Temat: PHP a zaplanowane zadania.

możesz sobie zrobić coś takiego.

Skoro nie wiesz jak tam hostingowcy mają zrobione, to poproś ich, aby Twój plik crona był dowiązaniem symbolicznym do pliku, który będzie w Twoim katalogu www. Wówczas za pomocą fwrite, fopen itd będziesz mógł zarządzać sobie treścią tego pliku, co za tym idzie, będziesz w łatwy sposób mógł kontrolować zdarzenia.

myślę że to też wyjście

konto usunięte

Temat: PHP a zaplanowane zadania.

Jeśli wszystko zawiedzie, możesz zawsze skorzystać z crona na komputerze, ktory masz pod kontrolą, np. miniserwerek w domu albo u znajomego kumpla, który hostuje strony więc i tak ma włączony kompyter 24 na dobę, niech cron okresowo wywoła http://adres.www/cron.php. Nie zapomnij o uwierzytelnieniu w cron.php!
Jakub L.

Jakub L. Programista

Temat: PHP a zaplanowane zadania.

Daniel P.:
Jeśli wszystko zawiedzie, możesz zawsze skorzystać z crona na komputerze, ktory masz pod kontrolą, np. miniserwerek w domu albo u znajomego kumpla, który hostuje strony więc i tak ma włączony kompyter 24 na dobę, niech cron okresowo wywoła http://adres.www/cron.php. Nie zapomnij o uwierzytelnieniu w cron.php!

Pomysł z http://worsethanfailure.com/Articles/The-Batch-Process...
?

konto usunięte

Temat: PHP a zaplanowane zadania.

Ja podpiąłem do jednego z moich serwisów wywołanie innego skryptu w tle (tak, aby nie wstrzymywał wczytania strony). Działa perfekcyjnie. Taki skrypt odpala się przy każdej odsłonie i sprawdza, kiedy nastąpiło poprzednie wykonanie (jeśli w ciągu ostatniej minuty, umiera). Wydaje mi się, że takie rozwiązanie w zupełności wystarcza.

konto usunięte

Temat: PHP a zaplanowane zadania.

Paweł G.:
Ja podpiąłem do jednego z moich serwisów wywołanie innego skryptu w tle (tak, aby nie wstrzymywał wczytania strony). Działa perfekcyjnie. Taki skrypt odpala się przy każdej odsłonie i sprawdza, kiedy nastąpiło poprzednie wykonanie (jeśli w ciągu ostatniej minuty, umiera). Wydaje mi się, że takie rozwiązanie w zupełności wystarcza.

To dobre rozwiązanie, jeśli na stronie panuje duży ruch.
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: PHP a zaplanowane zadania.

nie mając swego czasu dostępu do crona na jednym z serwerów, wykorzystałem dosć proste obejście tego problemu - crona skonfigurowałem na innym serwerze i zdalnie uruchamiał on właściwy skrypt poleceniem typu
wget -O /dev/null http://ip_serwera_bez_crona/.../..../*.php

takie coś wchodzi oczywiście w grę tylko wtedy, gdy nie zależy Tobie na bezpieczeństwie ;) no i pada chwilowo, gdy z jakiegoś powodu nie ma połączenia między serwerem X i Y...

ale moim zdaniem każda normalna firma hostingowa zapewni Ci dostęp do crona, albo sama doda "po swojemu" regułkę odwołującą się do wskazanego skryptu, gdy o to poprosisz - obecnie coraz więcej serwisów po prostu wymaga odpalania czegoś o określonym czasie - i dostawca nie współpracujący w tym temacie z klientami, szybko się ich pozbędzie.
Adrian Słowik

Adrian Słowik Programista PHP/Web
developer

Temat: PHP a zaplanowane zadania.

Jedyne słuszne rozwiązanie to właśnie wywoływanie JEDNEGO skryptu, który obsługuje całe zadanie za pomocą CRONa. Jeśli nie dysponujesz dostępem do tej usługi, możesz zarejestrować sie na http://webcron.orgAdrian Słowik edytował(a) ten post dnia 13.07.07 o godzinie 16:38
Grzegorz Kiersznowski

Grzegorz Kiersznowski IT Manager @
Autentika

Temat: PHP a zaplanowane zadania.

Wykonuj co okreslony czas skrypt przy pomocy crona. Niekonstruuj tego tak by dodawac kolejne zadania do crona, ale tak by skrypt wykonywal wszystko.

Moze na przykladzie powiadamiania emailem. Napisz skrypt ktory bedzie wybieral niewyslane powiadomienia przy wywolaniu. Gdy wysle - oznaczasz go jako wykonany i wiecej nie wykonujesz - zamiast tego, wysylasz nastepne. Wszystko da się zrobić przy pomocy jednego raz dodanego polecenia w cronie i jednego skryptu. Trzeba tylko dobrze pomyslec...

Następna dyskusja:

Zadania podczas rekrutacji ...




Wyślij zaproszenie do