Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Dejar un cgi funcionando permanentemente Responder al tema
Nuevo tema


Página 1 de 1  [ 4 mensajes ] 
 
Nota 2009-10-07 12:38 @568

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Dejar un cgi funcionando permanentemente
Hola.

Tengo una duda porque acabo de hacer un programa que me gustaría que esté siempre activo.

Lo que quiero es que este programa en CGI esté siempre activo; por eso me hice una cuenta en Tripod Lycos.

Pero tengo una duda básica ¿Si pongo index.cgi estaría siempre activo mi programa sin necesidad de alguna visita?


Nota 2009-10-07 14:45 @656
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Dejar un cgi funcionando permanentemente
Sí que puedes dejar un CGI siempre funcionando... pero... en la mayoría de los alojamientos, los procesos arrancados por el servidor web tienen un límite de tiempo de CPU, un máximo de memoria ocupada y un tiempo máximo de respuesta del programa al servidor Web.

Esto último se refiere a que es el servidor web el que arranca el CGI, después de recibir una petición del usuario. Si el CGI no termina de responder, el servidor web cortará la transmisión. Esto se configura en la directiva TimeOut en el Apache.

Lo que sí puedes hacer es devolver al servidor web la página que quieres mostrar, y luego entrar en el bucle de espera.

Algo así:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use CGI qw/:standard/;
  4.  
  5. print
  6.     header,
  7.     start_html("Pruebas..."),
  8.     p("Fin..."),
  9.     end_html,
  10.     ;
  11.  
  12. #close STDIN;
  13. close STDOUT;
  14. #close STDERR;
  15.  
  16. while (1) {
  17.     # Bucle sin fin
  18. }


El comentar la línea del STDIN es importante: si cerramos la entrada estándar, el servidor web matará a nuestro proceso. Pero si cerramos STDOUT le estamos diciendo que ya no le enviamos más información. El servidor web terminará la conexión con el cliente, pero aún seguirá haciendo funcionar el programa.

El problema... que un programa Perl sin fin es extraordinariamente peligroso...

Solo es necesario meter esta línea en el bucle anterior, para colgar la máquina, comiéndose todos los recursos:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
    $j .= 'x' x 1_000_000;

(reservamos un megabyte en cada vuelta).

O no: si el servidor web ha sido arrancado con algún tipo de limitación de consumo de recursos, matará a tu proceso.

Puedes probar a ver qué te sale... pero atención: recuerda que cada petición del CGI es una nueva instancia del programa, que se sumará a las anteriores. Debes incluir en el CGI una condición de parada, o te arriesgas a inundar el servidor de procesos corriendo a la vez.

Quizás sea más fácil ayudarte si nos dices para qué necesitas tener un programa funcionando constantemente (al menos, por encima).

_________________
JF^D Perl programming


Nota 2009-10-07 15:42 @695

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Dejar un cgi funcionando permanentemente
Gracias por tu explicación.

Se que suena mal pero pensaba en este pequeño proyecto para un bot irc que registre lo que pase pero nada ilegal.

¿Algo que agregar?


Nota 2009-10-07 16:19 @721
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Dejar un cgi funcionando permanentemente
Pero si el servidor IRC es visible desde Internet, puedes dejar funcionar ese programa en cualquier otro ordenador conectado a Internet. Por ejemplo, tu propio ordenador.

No me suena que a los proveedores de servicios les guste tener un programa funcionando constantemente.

Pero por probar...

Puedes usar la facilidad nph de CGI.pm para que la conexión no termine nunca y así el CGI puede enviar información al cliente.

Actualización: Sí que hay una forma de colocar un programa funcionando constantemente en un servidor de un proveedor de Internet: contratando un servidor físico. Así podrás instalar lo que quieras. Lo malo es que es un poco caro...

_________________
JF^D Perl programming


Responder al tema  [ 4 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO