2011-02-09 7 views
5

Chcę prostego zarządzania cron-jak w projekcie PHP istnieje kilka rzeczy, które chciałbym posiadać:Co powinienem użyć do prostego zarządzania zadaniami cron w projekcie PHP?

  1. php pracownik praca jest po prostu skrypt, który jest umieszczony w jakimś podkatalogu wewnątrz katalogu projektu
  2. tam jest podtekstem jak/cron/daily,/cron/monthly ... itd. w katalogu głównym projektu, który zawiera wszystko, co pracownicy.
  3. nie ma potrzeby mieszania z crontabem z dodanym każdym dodanym robotem.
  4. wszystkie skrypty są uruchamiane przez coś podobnego do run-parts z odpowiednią częstotliwością, a ich odpowiednie dane wyjściowe są rejestrowane w oddzielnych plikach, takich jak /var/log/projectname/cron/daily/somescript.log
  5. byłoby wspaniale mieć/cron/daemon dir zawierający skrypty, które powinny być uruchamiane na zawsze (drobiazgowo), ale nie więcej niż 1 instancja

Posiadam doświadczenie z tego rodzaju systemem planowania w jednym projekcie i bardzo mi się podobało. Zapewnia wiele fajnych rzeczy:

  • zadania są skryptami projektu i znajdują się w katalogu projektu, śledzone przez git.
  • nie ma potrzeby rozpraszania crontab.
  • logi są uporządkowane.
  • Demony są łatwe do zbudowania.

Po prostu użyłbym/bin/run-parts na podkatalogach projektu/cron, ale nie udało mi się podzielić dzienników, tak jak chciałem. A podzielone logowanie jest bardzo fajną funkcją.

Tak, po prostu myślałem, że tego rodzaju systemy były tworzone wiele razy wcześniej, czy jest jakieś gotowe do użycia rozwiązanie dla projektu PHP? Zasadniczo jest to po prostu trochę bardziej inteligentny odpowiednik części biegowych. Czy powinienem napisać to jeszcze raz?

P.S. Istnieje wiele innych rozwiązań specyficznych dla kolejki zadań, takich jak Gearman. Są świetne, ale ta kwestia dotyczy lekkich rozwiązań projektowych cron.

+0

zrobić wyszukiwania Google dla "pseudo-cron", nie jest mnóstwo bezpłatnych skryptów, które można zaadaptować. Ale na ogół sam to piszę; Zrobiłem to już wcześniej i nie jest to trudne. – Benubird

+0

Dzięki, pseudo-cron są interesujące rzeczy, ale nie są one bardzo wygodne: zadania nie są w ogóle zadaniami cron, harmonogram może zostać pominięty i powinieneś napisać pseudo-crontab. jeśli chodzi o trudność - tak, to nie jest takie trudne, właściwie po prostu mam przeczucie, że może nie znam jakiegoś świetnego rozwiązania, które zamierzam zmienić na nowo i odpowiedzieć na pytanie – evgenyq

+0

Jakąkolwiek odpowiedź dotyczącą podanych poniżej odpowiedzi? – tobyS

Odpowiedz

0

Periodic is a CRON compatible task manager napisane w PHP. Aby sprawić, by działało tak, jak sobie tego życzysz, będzie jeszcze trochę do zrobienia, ale powinno to dać ci dobrą podstawę.

+0

Wygląda na to, że firma stoi za tym, Arbit zniknął. – Richard

+0

Nadal można znaleźć źródła okresowe na Github https://github.com/Arbitracker/Periodic. – tobyS

2

Podjęliśmy nieco inne podejście do mojej obecnej pracy. Używamy Jenkins (dawniej Hudson) do naszych potrzeb związanych z harmonogramem związanych z PHP. Jest to dobre rozwiązanie, ponieważ można wykorzystać istniejącą infrastrukturę do powiadamiania (jabber, e-mail itp.) I znajduje się obok innych zadań kompilacji w celu wydania kodu. Istnieje również możliwość oglądania wyników konsoli w czasie rzeczywistym, uzyskiwania transkryptów z każdego przebiegu itp.

Udokumentowałem sposób, w jaki ostatnio organizujemy nasze zadania PHP, dzięki czemu możemy z łatwością wykorzystać naszą strukturę aplikacji z CLI, czyli w jaki sposób Jenkins interfejsy z zadaniami.

Oto post o organizowaniu zadań PHP wsadowych do użytku z Jenkins lub Hudson:

http://blog.shupp.org/2011/03/15/organizing-php-batch-jobs/

-1

korzystania z funkcji:

function parse_crontab($time, $crontab) 
     {$time=explode(' ', date('i G j n w', strtotime($time))); 
      $crontab=explode(' ', $crontab); 
      foreach ($crontab as $k=>&$v) 
        {$v=explode(',', $v); 
        foreach ($v as &$v1) 
          {$v1=preg_replace(array('/^\*$/', '/^\d+$/', '/^(\d+)\-(\d+)$/', '/^\*\/(\d+)$/'), 
              array('true', $time[$k].'===\0', '(\1<='.$time[$k].' and '.$time[$k].'<=\2)', $time[$k].'%\1===0'), 
              $v1 
              ); 
          } 
        $v='('.implode(' or ', $v).')'; 
        } 
      $crontab=implode(' and ', $crontab); 
      return eval('return '.$crontab.';'); 
     } 
var_export(parse_crontab('2011-05-04 02:08:03', '*/2,3-5,9 2 3-5 */2 *')); 
var_export(parse_crontab('2011-05-04 02:08:03', '*/8 */2 */4 */5 *')); 
+0

Co to jest $ time i $ crontab? –

+0

@Bhargav, spójrz na dwa przykłady na dole – diyism

Powiązane problemy