Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Cron o cómo repetir cada X tiempo en Windows
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Mie Jul 11, 2007 11:13 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Cron o cómo repetir cada X tiempo en Windows Responder citando

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.
Mensaje Mie Jul 11, 2007 1:30 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

Windows dispone del programa Tareas programadas para esas cosas.
Mensaje Mie Jul 11, 2007 1:43 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Schedule Tasks Responder citando

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
Mensaje Mie Jul 11, 2007 1:53 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

¡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.
Mensaje Mie Jul 11, 2007 2:32 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
nop Responder citando

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...
Mensaje Mie Jul 11, 2007 4:53 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

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).
Mensaje Mie Jul 11, 2007 5:54 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

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.
Mensaje Mie Jul 11, 2007 6:27 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

* 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:
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/archives/2004/09/the_windows_task_scheduler_is_not_a_secondclass_citizen.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:
perl programa_1.pl
Mensaje Jue Jul 12, 2007 8:43 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

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... Sad
Mensaje Jue Jul 12, 2007 8:50 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

¿Qué significa eso de que se ejecuta como TXT?
Mensaje Jue Jul 12, 2007 9:38 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Cada vez que se ejecuta el Schedule Tasks, se abre el Notepad, con mi código, (en algunas ocasiones así veo el código). Sad
Mensaje Jue Jul 12, 2007 1:59 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Kiloko escribió:
Cada ves que se ejecuta el Schedule Tasks, se habre el notepad, con mi codigo, ( en algunes ocaciones asi veo el codigo ). Sad


Esto sucede porque no estás mandando el script a perl el programa. ¿Podrías ponernos aquí la línea exacta que estás poniendo en el task manager?

Saludos
Mensaje Jue Jul 12, 2007 2:10 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

En run pongo C:\Perl\UPS\bin\monitor.pl.
En start in pongo C:\Perl\bin.
Y lo demás es lo de siempre, que empiece cada X tiempo, etc, etc.

Como le comento a Joaquín, el Schedule, efectivamente lo ejecuta, pero no ejecuta el archivo .pl; en su lugar me abre el editor de texto Notepad.

Y ya le cambié al tipo de archivo (pl) la extensión para que así que cuando estoy en el directorio y le doy clic al archivo automáticamente se ejecuta, pero en Schedule, nop (se abre el Notepad).
Mensaje Jue Jul 12, 2007 3:35 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Ese es el problema, la línea en run debería de ser de la siguiente manera:

Código:
C:\Perl\bin\perl.exe C:\Perl\UPS\bin\monitor.pl


Saludos
Mensaje Jue Jul 12, 2007 4:53 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Ya casi, ya casi.

Ahora ya no aparece el TXT pero aun no hace nada, así que le saqué una foto a la pantalla y me di cuenta que si ejecuto el archivo dándole doble clic, como ya lo tenía dispuesto para que se abriera PL con perl.exe, aparece en la parte de arriba.

C:\Perl\bin\perl5.8.8.exe

y sí compila y todo bien, pero cuando se ejecuta el Schedule, aparece

C:\WINDOWS\system32\svchost.exe

Como ves, creo yo que por ahí va el problema. También traté cambiando el Schedule

C:\Perl\bin\perl.exe

por

C:\Perl\bin\perl5.8.8.exe

Pero tampoco jaló...
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Ir a página 1, 2  Siguiente
Página 1 de 2



Powered by phpBB © 2001, 2005 phpBB Group