Página 1 de 1

Editar cron con Config::Crontab

NotaPublicado: 2011-09-26 15:14 @676
por danimera
¿Cómo puedo editar el cron? Actualmente tengo este código similar y me crea el nuevo cron sin problemas, pero cuando voy a agregar otro cron, me edita el que ya tenía.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $block = new Config::Crontab::Block;
  2. my $ct = new Config::Crontab;
  3.  
  4.   $block->last( new Config::Crontab::Comment( -data => '## Envio' ) );
  5.   $block->last( new Config::Crontab::Env( -name => 'ENVIO', -value => 'sitedata' ) );
  6.   $block->last( new Config::Crontab::Event( -minute  => 40,
  7.                                             -hour    => 3,
  8.                                             -command => "wget 'url.com'" ) );
  9. $ct->last($block);
  10.   $ct->write;
  11.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


No entiendo las líneas de comment y Env.

Bueno, traté de ponerle un file, pero no sé cómo usar eso, o cómo debería ser. La documentación del CPAN es clara, pero no entiendo bien cómo funcionan los cron jobs, ese es mi problema.

Re: Editar cron con Config::Crontab

NotaPublicado: 2011-09-26 15:43 @696
por explorer
Las líneas Comment sirven para definir los comentarios, y el Env, para definir las variables del entorno, en el que se ejecutarán los comandos, en el periodo indicado.

Deberías poner un ejemplo completo de lo que quieres hacer, porque solo has puesto unas líneas de ejemplo.

Para entender cómo funcionan los trabajos bajo el demonio cron, tienes una explicación muy buena en la Wikipedia (cron [Unix]) en la página de manual de crontab, en tu ordenador.

¿Has hecho un read() para que se vayan agregando los bloques, unos tras otros?

Re: Editar cron con Config::Crontab

NotaPublicado: 2011-09-26 16:04 @711
por danimera
Pues eso es todo lo que hago, lo único que varia es el nombre del cron, y la fecha en que se ejecuta, ese es mi trozo de código no hay nada más oculto.

Y quiero lograr cómo leer un cron anterior y editarlo, y cómo crear uno nuevo, aún no sé cómo hacerlo.

Re: Editar cron con Config::Crontab

NotaPublicado: 2011-09-26 16:48 @742
por explorer
Es que te falta, justamente, un read(). El módulo debe saber a qué fichero crontab te estás refiriendo: si al del usuario (con crontab -l), o un fichero aparte. Si no indicas ninguno, entonces está creando un fichero nuevo cada vez.

Por ejemplo, con el siguiente ejemplo, se puede cambiar un fichero crontab. Y cada vez que lo ejecutas, se agrega un bloque más. Eso es porque primero se lee el fichero actual.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Config::Crontab;
  3.  
  4. my $ct = new Config::Crontab;
  5.  
  6. $ct->read(-file => 'cron.txt'); # Leemos el crontab actual
  7.  
  8. $ct->write('cron.bak');     # Grabamos una copia del estado actual
  9.  
  10.  
  11. my $block = Config::Crontab::Block->new;
  12.  
  13. $block->last( new Config::Crontab::Comment( -data => '## Envio' ) );
  14. $block->last( new Config::Crontab::Env    ( -name => 'ENVIO', -value => 'sitedata' ) );
  15. $block->last( new Config::Crontab::Event  ( -minute  => 40,
  16.                                             -hour    => 3,
  17.                                             -command => "wget 'url.com'",
  18.                                           )
  19. );
  20.  
  21. $ct->last($block);          # Añadimos el bloque
  22.  
  23.  
  24. $ct->write('cron.txt');     # Sacamos una copia del estado final
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Si, en lugar de querer modificar un fichero, queremos que se modifique el crontab del usuario, solo tienes que modificar el read() y el write(), quitándoles los argumentos.