Mie Jul 11, 2007 11:13 am
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
| Cron o cómo repetir cada X tiempo en Windows |
|
|
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. |
|
|
|

Mie Jul 11, 2007 1:30 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español.
Windows dispone del programa Tareas programadas para esas cosas. |
|
Mie Jul 11, 2007 1:43 pm
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
| Schedule Tasks |
|
|
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 |
|

Mie Jul 11, 2007 1:53 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
¡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. |
|

Mie Jul 11, 2007 2:32 pm
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
| nop |
|
|
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... |
|

Mie Jul 11, 2007 4:53 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
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). |
|

Mie Jul 11, 2007 5:54 pm
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
|
|
|
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. |
|

Mie Jul 11, 2007 6:27 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
* 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 |
|
|

Jue Jul 12, 2007 8:43 am
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
|
|
|
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...  |
|
Jue Jul 12, 2007 8:50 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| ¿Qué significa eso de que se ejecuta como TXT? |
|
Jue Jul 12, 2007 9:38 am
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
|
|
|
Cada vez que se ejecuta el Schedule Tasks, se abre el Notepad, con mi código, (en algunas ocasiones así veo el código).  |
|
Jue Jul 12, 2007 1:59 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|
|
| Kiloko escribió: | Cada ves que se ejecuta el Schedule Tasks, se habre el notepad, con mi codigo, ( en algunes ocaciones asi veo el codigo ).  |
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 |
|
Jue Jul 12, 2007 2:10 pm
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
|
|
|
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). |
|
Jue Jul 12, 2007 3:35 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|
|
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 |
|
Jue Jul 12, 2007 4:53 pm
|
 |
Kiloko
Perlero Adicto

|
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
|
|
|
|
|
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ó... |
|
Powered by phpBB © 2001, 2005 phpBB Group
|