2011-02-09 16 views
5

Voglio una semplice gestione cron-come nel progetto PHP ci sono alcune cose che vorrei avere:Cosa devo usare per la gestione di semplici cron job nel progetto PHP?

  1. php lavoratore lavoro è solo lo script semplice che viene inserito in qualche sottodirectory all'interno delle cartelle del progetto
  2. lì è sottostruttura come/cron/daily,/cron/monthly ... etc nella radice del progetto che contiene tutti i lavoratori
  3. non c'è bisogno di fare casino con crontab con ogni lavoratore aggiunto.
  4. tutti gli script vengono eseguiti da qualcosa come run-parts con la frequenza corrispondente e il loro rispettivo output viene registrato in file separati come /var/log/projectname/cron/daily/somescript.log
  5. sarebbe bello avere/cron/daemon dir contenente script che dovrebbero essere eseguiti per sempre (minutamente) ma non più di 1 istanza

Ho avuto esperienza con questo tipo di sistema di pianificazione in un progetto e l'ho adorato. Fornisce una serie di cose precise:

  • i lavori sono script di progetto e risiedono nella directory del progetto, tracciati da git.
  • non c'è bisogno di messaggistica crontab.
  • i registri sono ordinati.
  • i demoni sono facili da costruire.

Vorrei usare/bin/run-parts sui sottodir di progetto/cron, ma non sono riuscito a dividere i log come volevo. E la registrazione suddivisa è una caratteristica molto bella da avere.

Quindi, ho pensato che questo tipo di sistemi sono stati creati molte volte prima, c'è una soluzione pronta per l'uso per il progetto PHP? Fondamentalmente è solo un po 'più intelligente equivalente alle parti di corsa. Dovresti semplicemente scriverlo ancora una volta?

P.S. Ci sono molte altre soluzioni specifiche per la coda di lavoro come Gearman. Sono grandi, ma questa domanda riguarda la soluzione leggera per i lavori del progetto cron.

+0

Fate una ricerca su Google per "pseudo-cron", ci ci sono un sacco di script gratuiti che possono essere adattati. Ma nel complesso, lo scriverei io stesso; L'ho già fatto e non è difficile. – Benubird

+0

Grazie, gli pseudo-cron sono cose interessanti, ma non sono molto convenienti: i lavori non sono affatto cron, la pianificazione può essere persa, e dovresti scrivere pseudo-crontab. per quanto riguarda la difficoltà - sì, non è così difficile, in realtà ho solo la sensazione che potrei non conoscere una grande soluzione Ho intenzione di reinventare e riscrivere – evgenyq

+0

Qualche risposta per quanto riguarda le risposte fornite di seguito? – tobyS

risposta

0

Periodic is a CRON compatible task manager scritto in PHP. Per farlo funzionare come desideri, ci sarà ancora del lavoro da fare, ma dovrebbe darti una buona base.

+0

Sembra che la compagnia dietro questo, Arbit è andato via. – Richard

+0

È ancora possibile trovare le fonti periodiche su Github https://github.com/Arbitracker/Periodic. – tobyS

2

Abbiamo adottato un approccio leggermente diverso al mio attuale lavoro. Usiamo Jenkins (precedentemente Hudson) per le nostre esigenze di programmazione relative a PHP. È bello perché puoi sfruttare l'infrastruttura esistente per le notifiche (jabber, e-mail, ecc.) E si trova accanto ai nostri altri lavori di compilazione per le versioni di codice. C'è anche la possibilità di vedere l'output della console in tempo reale, ottenere le trascrizioni di ogni run, ecc.

Ho documentato il modo in cui organizziamo i nostri lavori PHP di recente in modo che possiamo facilmente sfruttare il nostro framework applicativo da CLI, che è come Jenkins si interfaccia con i lavori.

Ecco il post su organizzare posti di lavoro PHP in batch per l'utilizzo con Jenkins o Hudson:

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

-1

Usare questa funzione:

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

Cosa sono $ time e $ crontab? –

+0

@Bhargav, guarda i due esempi in basso – diyism