2011-02-09 8 views
5

Quiero un simple gestión cron-como en el proyecto de PHP hay algunas cosas que me gustaría tener:¿Qué debo usar para la administración simple de trabajos cron en el proyecto PHP?

  1. php trabajador trabajo es sólo la escritura normal que se coloca en algún subdirectorio dentro del directorio del proyecto
  2. existe es un subárbol como/cron/daily,/cron/monthly ... etc en la raíz del proyecto que contiene todos los trabajadores
  3. no hay necesidad de meterse con crontab con cada trabajador agregado.
  4. todos los scripts se ejecutan por algo así como run-parts con la frecuencia correspondiente, y su salida respectiva se registra en archivos separados como /var/log/nombredeproyectos/cron/daily/somescript.log
  5. sería genial tener/dir cron/demonio que contiene secuencias de comandos que se deben ejecutar para siempre (minuciosamente), pero no más de 1 instancia

que he tenido experiencia con este tipo de sistema de programación en un proyecto y me encantó. Proporciona varias cosas interesantes:

  • trabajos son scripts de proyecto y residen en el directorio del proyecto, seguido por git.
  • sin necesidad de molestar crontab.
  • registros están resueltos.
  • daemons son fáciles de construir.

Solo usaría/bin/run-parts en project/cron subdirs, pero no logré dividir los registros como quería. Y el registro dividido es una característica muy agradable de tener.

Entonces, pensé que este tipo de sistemas ya se habían creado muchas veces antes, ¿hay alguna solución lista para usar para el proyecto PHP? Básicamente es solo un equivalente de partes de carrera más inteligente. ¿Debería escribirlo una vez más?

P.S. Hay muchas más soluciones específicas para colas de trabajos, como Gearman. Son geniales, pero esta consulta es sobre la solución liviana de proyectos cron de proyectos.

+0

Haga una búsqueda en Google de "pseudo-cron", hay hay muchos scripts gratuitos que se pueden adaptar. Pero en general, lo escribiría yo mismo; Lo he hecho antes y no es difícil. – Benubird

+0

Gracias, pseudo-cron son cosas interesantes, pero no son muy convenientes: los trabajos no son trabajos cron en absoluto, la programación podría perderse, y usted debe escribir pseudo-crontab. en cuanto a la dificultad, sí, no es tan difícil, en realidad solo tengo la sensación de que podría no saber alguna gran solución. Voy a reinventar y volver a escribir. – evgenyq

+0

¿Alguna respuesta a las respuestas dadas a continuación? – tobyS

Respuesta

0

Periodic is a CRON compatible task manager escrito en PHP. Para que funcione como usted lo desea, todavía quedará trabajo por hacer, pero debería darle una buena base.

+0

Parece que la compañía detrás de esto, Arbit se ha ido. – Richard

+0

Aún puede encontrar las fuentes periódicas en Github https://github.com/Arbitracker/Periodic. – tobyS

2

Hemos tomado un enfoque ligeramente diferente en mi trabajo actual. Usamos Jenkins (anteriormente Hudson) para nuestras necesidades de programación relacionadas con PHP. Es agradable porque puede aprovechar la infraestructura existente para notificaciones (jabber, correo electrónico, etc.), y se encuentra al lado de nuestros otros trabajos de compilación para versiones de código. También existe la posibilidad de ver la salida de la consola en tiempo real, obtener transcripciones de cada ejecución, etc.

documenté la forma en que organizamos nuestros trabajos PHP recientemente para que podamos aprovechar nuestro marco de aplicaciones de CLI, que es cómo Jenkins interfaces con los trabajos.

Aquí está el post sobre la organización de los trabajos de PHP por lotes para su uso con Jenkins o Hudson:

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

-1

Utilice esta función:

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

¿Cuánto son $ time y $ crontab? –

+0

@Bhargav, mira los dos ejemplos en la parte inferior – diyism

Cuestiones relacionadas