• Publicidad

Dejar un cgi funcionando permanentemente

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Dejar un cgi funcionando permanentemente

Notapor BigBear » 2009-10-07 12:38 @568

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?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Dejar un cgi funcionando permanentemente

Notapor explorer » 2009-10-07 14:45 @656

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í:

Sintáxis: [ Descargar ] [ Ocultar ]
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. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    $j .= 'x' x 1_000_000;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

(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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dejar un cgi funcionando permanentemente

Notapor BigBear » 2009-10-07 15:42 @695

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?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Dejar un cgi funcionando permanentemente

Notapor explorer » 2009-10-07 16:19 @721

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

cron