Página 1 de 2

Cron o cómo repetir cada X tiempo en Windows

NotaPublicado: 2007-07-11 12:13 @551
por Kiloko
Tengo mi código y necesito que éste se repita cada X tiempo, que yo mismo defino (1, 3, 5 minutos o 4 horas).

Ejecuto mi programa y éste realiza una acción cada X tiempo y así durante todo el día (cada X semanas cada X años).

Me comentan que puedo utilizar Cron, pero según lo entiendo, toma un módulo de tiempo anidado en un X espacio web (servidor) y lo manda llamar para que éste sea la referencia de tiempo, pero al parecer no está disponible en Windows.

Algunas opciones que he encontrado son: Instalar un emulador, Cronw, pero no logro hacerlo funcionar. Mi otra opción es utilizar un for anidado para crear las repeticiones y por medio de sleep hacer pausas.

Lo que quiero hacer es un programa x que haga que funcione el programa y y que corra cada X tiempo (2 minutos, 2 días, etc) haga lo que tiene que hacer y que se muera y se repita el ciclo.

Que me sugieren. Ojo, lo estoy haciendo en Windows.

NotaPublicado: 2007-07-11 14:30 @645
por explorer
Bienvenido a los foros de Perl en Español.

Windows dispone del programa Tareas programadas para esas cosas.

Schedule Tasks

NotaPublicado: 2007-07-11 14:43 @655
por Kiloko
Creo que te refieres al Schedule Tasks pero no logro hacer la conexión entre la ejecución y al proceso Cron. Y por cierto, ¿a qué servidor se tendría que conectar?

Algo así estaría en el run:

C:\PROGRA~1\INTERN~1\IEXPLORE.EXEhttp:\www.example.com\cron.php

NotaPublicado: 2007-07-11 14:53 @662
por explorer
¡Ah, tu lo que quieres es ejecutar un programa hecho en PHP!.

Pues... hay varias opciones.

* Instalas un servidor web con soporte para PHP en la máquina y en las Tareas programadas pides que arranque el iexplore.exe pasándole como parámetro la dirección http://localhost/cron.php, suponiendo que has dejado la página cron.php en el raíz del web.

* En Linux se pueden ejecutar programas hechos con PHP usando el ejecutable php (obvio). Por ejemplo: php cron.php. Pero no tengo ni idea de si en Windows existe algo parecido (lo siento, hace años que ya no uso Windows).

* Pasas el programa cron.php a Perl y puedes ejecutarlo como en la opción anterior.

nop

NotaPublicado: 2007-07-11 15:32 @689
por Kiloko
nop, yo quiero hacer 2 programas en Perl.

Programa (1): Debe de decir: cuantas veces se va a ejecutar el programa
2 y durante cuanto tiempo. Aquí es donde no sé cómo usar el
cron o que otra opción tengo para poder hacerlo.
Este programa no lo tengo.

Programa (2) Ejecuta una rutina que saca info y demas,
Este programa ya lo tengo.

Saludos...

NotaPublicado: 2007-07-11 17:53 @787
por explorer
Como no quieres usar las Tareas Programadas de Windows para la tarea 1, yo usaría un módulo como Schedule::Cron, con la atención puesta de que al estar en Windows, por ser un sistema operativo limitado, no puedes hacer un fork del proceso que se debe ejecutar cuando salta la alarma, por lo que estarás obligado a ejecutarlos siempre con la opción nofork puesta a 1. Esto tiene la desventaja de que la ejecución del programa 2 puede interferir en el disparo de los siguientes eventos, si la ejecución es muy larga.

Yo recuerdo que se me planteó este problema hace casi 5 años para un ordenador que teníamos que enviar a Marruecos y el problema era que se tenía que activar un programa Perl que realizaba un FTP a nuestro servidor, para bajarse unos ficheros. Lo resolví muy fácil con las Tareas Programadas, ya que le puse que se ejecutara todos los días a las 00:30 (y otras condiciones de seguridad más, como evitar que se ejecutara dos veces y que matara el proceso si llevaba demasiado tiempo activo).

NotaPublicado: 2007-07-11 18:54 @829
por Kiloko
Creo que tienes razón, sería mejor utilizar las tareas programadas para Windows, pero todo indica que se ejecuta, pero no se crea el archivo TXT que debería... humm, está raro porque si lo ejecuto en DOS, sale, y también con Komodo. ¿Qué podrá ser?, ¿será conveniente hacerlo en un .exe?
¿Algo así como mandar llamar a DOS y poner la ruta y el path?
Nada mas que no me acuerdo de como hacerlo. Jajajaja, hace años que no veo DOS... a ese nivel.

NotaPublicado: 2007-07-11 19:27 @852
por explorer
* Cuando se ejecuta una tarea por parte de un daemon, debemos tener la precaución de que nuestro programa sabe el directorio de trabajo en que está, porque la mayor parte de los daemon ejecutarán los programas en un determinado directorio de trabajo (uno del sistema, el temporal, o algo peor). Que tu no veas la salida no significa que no la haya creado, sino que quizás lo ha hecho en un directorio muy distinto al que ves. Para solucionar esto, lo normal es colocar un chdir('path completo'); al principio del programa. Así estaremos seguros de que las operaciones con ficheros se realizan en el directorio correcto y no en el que el daemon le de la gana (que quizás sea tampoco donde reside el ejecutable. Lo normal en Windows podría ser el directorio home del usuario).

* Si después de lo anterior sigue sin funcionar, es posible que Tareas Programadas no sepa qué hacer con un script Perl. Si has instalado una distribución como la de ActiveState, se habrá registrado en el sistema que los ficheros con extensión .pl deben ser ejecutados por el binario C:\Perl\bin\perl.exe, por lo que podremos ejecutarlos directamente en línea de comandos y otros lugares, quizás también en Tareas Programadas. Si has utilizado otra distribución que no haya hecho ese registro, puedes configurar Windows con ese comportamiento (en las opciones de carpeta, creo recordar). Y si aún así no funciona, siempre queda la opción de que le digas a Tareas Programadas que el binario a ejecutar sea el C:\Perl\bin\perl.exe (o donde esté el intérprete perl de Perl) poniendo a continuación el nombre del fichero Perl que quieres ejecutar. Por ejemplo:

Código: Seleccionar todo
C:\Perl\bin\perl.exe C:\Desarrollo\Proyecto\Tiempos\Cron\programa_1.pl


Cuidado con los espacios en blanco en los path... si los hay, entrecomilla el argumento.

Buscando por Google, me sale esta referencia:
http://www.randomtree.org/eric/techblog ... tizen.html
en la que muestra que es incluso aún más sencillo, porque en los últimos Windows ya se puede indicar el directorio de trabajo, con lo que queda reducido a:

Código: Seleccionar todo
perl programa_1.pl

NotaPublicado: 2007-07-12 09:43 @447
por Kiloko
No pues esta cañón, de plano ya me estoy dando por vencido, ya que cada vez que se ejecuta, se ejecuta como TXT y eso que cambio el tipo de archivo y el modo de abrirlo del archivo .pl. Ya no sé qué hacer, no puedo hacer que mi archivo.pl se ejecute... :(

NotaPublicado: 2007-07-12 09:50 @451
por explorer
¿Qué significa eso de que se ejecuta como TXT?