Witam
Chciałbym zrobić w PHP cron'a który uruchamiany był by co minute przez Cron'a na serwerze. Cron PHP pobierał by listę rzeczy "do zrobienia" z bazy danych i je wykonywał sobie.
Lista rzeczy będzie różna od backup'a danych po uruchamianie zdalnie komend. Wszystkie akcje napisane są w PHP dlatego też chce zrobić crona za pomocą php.
Dlaczego sobie tych poszczególnych akcji nie dodam do Crona na serwerze, a bo jestem uparty i chce dodać tylko jeden wpis na serwerze a wszystkim zarządzać z panelu który mam napisany własno ręcznie.
Teraz pytanie czy ktoś spotkał się z czymś takim i ma jakieś rady/linki. I pytanie czy nie jest to porwanie się z motyką na księżyc?
nie, to jest do napisania w godzinę czy dwie.
przede wszystkim zwróć uwagę na to, żeby cron się nie uruchomił dwa razy, tj. masz w kolejce np. robienie backupu, to trwa 1,5 minuty, cron startuje o 22:00, robi backup, cron startuje o 22:01 i widzi w kolejce backup no to robi backup.
weź pod uwagę też to, że cron może się nie udać (restart serwera, albo po prostu coś się wysypie) i pasuje, żeby kolejne wywołanie podjęło kolejną próbę wykonania zadania (ew. odłożenie go na później)
ja to robię prymitywnie - na pliku o nazwie cron-running
:
- uruchamiam skrypt
1a. nie ma pliku to przeztouch
go tworzę
1b. jeżeli jest, to sprawdzam, czy data modyfikacji jest starsza niż 15minut, jeżeli nie - przerywam działanie, jeżeli tak - robię touch - wykonuję zadanie, jeżeli trwa długo, to dla pewności co pewien czas robię touch
- udało się wykonać zadanie - usuwam plik, żeby kolejny cron wystartował od razu
poszukaj hasła "php poor man's cron", można wykorzystać z cronem lub bez (bez - o ile masz ruch na stronie).
@vpiotr to rozwiązanie się nie nadaje jeżeli zadania w cronie wykonują się dłużej, już lepiej z zewnętrznych źródeł uruchamiać crona
dzek69 napisał(a):
@vpiotr to rozwiązanie się nie nadaje jeżeli zadania w cronie wykonują się dłużej, już lepiej z zewnętrznych źródeł uruchamiać crona
Zgadza się. W wypadku jakichś długich zadań których nie można robić iteracyjnie (np. pakowanie całej aplikacji z bazą danych) takiego pseudo-crona można inicjować np. z demona publikującego RSS-a na Twitterze, FB czy innym ... portalu. Tyle że będzie to rozwiązanie poor pełną gębą.
Najtańsze dobre hostingi kosztują 40zł/rok. Sporo/większość darmowych też ma crona. Więc w razie braku polecam zmianę hostingu, albo nawet wzięcie darmowego hostingu tylko po to, żeby gdzie indziej uruchamiał crona.