Guía de resolución de problemas para scripts de Perl y CGI

Guía de resolución de problemas para scripts de Perl y CGI


Última modificación: 8 de junio de 2020

Visión general

Muchos usuarios y administradores de sistemas encuentran problemas con los scripts CGI y Perl. Esta guía de resolución de problemas enumera muchos de los problemas comunes y sus soluciones.

Importante:

Debido a que cPanel, LLC no desarrolló sus scripts de Perl personalizados, el soporte técnico de cPanel no puede ayudarlo con ellos.

Nota:

Los siguientes ejemplos solucionan problemas de example.cgi texto.

Solución

Realice los siguientes pasos para solucionar los problemas de sus scripts CGI y Perl:

Verifique los permisos de la secuencia de comandos

Asegúrese de que los usuarios y grupos adecuados puedan ejecutar el script. Para mostrar los permisos de un script, ejecute el ls -la example.cgi comando como el root usuario.

La salida se parecerá al siguiente ejemplo:

-rw-rr- 1 burst wheel 41 May 29 16:04 example.cgi

En este ejemplo, el script contiene los siguientes permisos:

  • Todo el mundo puede leer el guión.
  • Solo el dueño puede escribir en el guión.
  • Nobody puede ejecutar el script.

Para cambiar los permisos del script, ejecute el siguiente comando:

Este comando cambia los permisos del script a los siguientes permisos:

  • Todo el mundo puede leer y ejecutar el script.
  • Solo el dueño puede escribir en el guión.

Para obtener más información sobre estos permisos del sistema de archivos, lea Artículo de notación numérica de Wikipedia.

Verifique el código de la secuencia de comandos para ver si hay problemas

Si el servidor todavía devuelve un 500 error, puede existir un error de código en el script.

Agregue el siguiente código en la parte superior de su secuencia de comandos:

#!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser);

Este cambio redirige los errores al navegador y no mostrará un 500 error.

Para comprobar el código en busca de errores, ejecute el perl -w ./example.cgi mando. Este comando ejecuta el script con la marca de advertencias, que muestra cualquier error en el código de una manera similar al siguiente ejemplo:

Can’t find string terminator ‘"’ anywhere before EOF at ./example.cgi line 3.

Este mensaje indica que el script de Perl no se puede ejecutar porque contiene errores fatales.

Nota:

Nosotros fuertemente le recomendamos que busque tutoriales en línea sobre Perl y cómo solucionar errores específicos.

Agregar un tipo de contenido a la secuencia de comandos

Si encontró un error dentro del código, ejecute el script desde la línea de comando nuevamente con el siguiente comando:

perl -w ./example.cgi Hello World !

Si la secuencia de comandos funciona en la línea de comandos, pero no funciona en un navegador, es posible que la secuencia de comandos no envíe el tipo de contenido correcto al navegador.

En el ejemplo anterior, suponga que el example.cgi El script funciona en el shell, pero no se muestra en el navegador. Para solucionar este problema, agregue la siguiente línea cerca de la parte superior del script:

print Content-type: text/htmlnn;

Cuando ejecuta el script actualizado con el perl -w ./example.cgi comando, verá un resultado similar al siguiente resultado:

Content-type: text/html Hello World !

Utilice el módulo suEXEC para evaluar los permisos de prueba

Si el script no funciona en el navegador con el tipo de contenido correcto, el suexec módulo puede causar el problema. El servidor web Apache a menudo incluye el suexec módulo como medida de seguridad. Prueba a la fuerza los permisos de los scripts CGI antes de ejecutarlos. La prueba verifica los permisos de los scripts y determina si los usuarios adecuados pueden acceder a ellos.

Después de la suexec completa la prueba, obliga a que los scripts se ejecuten con los permisos del propietario de la cuenta.

Para comprobar los permisos adecuados, ejecute el ls -la comando, que devolverá un resultado similar al siguiente resultado:

1
2
3
4
total 6
drwxr-xr-x 2 burst wheel 512 May 29 16:04 .
drwxr-xr-x 3 burst wheel 512 May 29 16:03 ..
-rwxr-xr-x 1 burst wheel 78 May 29 16:24 example.cgi

Los «.”Directorio representa el directorio de trabajo actual. Configure este directorio con los siguientes permisos:

  • Todo el mundo puede leer y ejecutar el script.
  • Solamente el propietario puede escribir en el guión.

Si los problemas del script persisten, examine el suexec archivo de registro en el /usr/local/apache/logs/ directorio. Utilizar el tail -f suexec_log comando para ver el archivo de registro, y luego intente cargar el script en su navegador para ver el error que provocó el script.

Utilice el módulo suexec para verificar la propiedad

Confirme que el usuario de la cuenta es el propietario del archivo. A veces, cuando algo corrompe la contraseña o el archivo de grupo, verá un número en lugar de un nombre de usuario.

Cuando ejecuta el ls -la comando y existe un archivo corrupto, el resultado será similar al siguiente ejemplo:

1
2
3
4
total 6
drwxr-xr-x 2 8840 8840 512 May 29 16:04
. drwxr-xr-x 3 burst wheel 512 May 29 16:03
.. -rwxr-xr-x 1 8840 8840 78 May 29 16:24 example.cgi

Para corregir este error, ejecute el chown burst.burst * * comando, donde burst representa el nombre del propietario de la cuenta. Esto cambiará el propietario del script y el directorio al propietario correcto.

Incluso si la salida devuelve un propietario correcto, devuelve un ID de usuario diferente. Este problema aparece en el suexec_log expediente.

Si ha realizado todos estos pasos y el script aún no funciona, envíe un ticket de soporte.

¿Qué sucede si todos los scripts de Perl o CGI que no se ejecutan como usuario root devuelven el error getgrgid de groupid no válido XXXXX?

La siguiente salida muestra un ejemplo de salida de error de un script de Perl que el registro de errores de Apache (/usr/local/apache/logs/error_log) contiene:

[Tue Mar 26 09:13:16 2002] [error] [client x.x.x.x] (2)No such file or directory: getgrgid: invalid groupid 32015
[Tue Mar 26 09:13:16 2002] [error] (2)No such file or directory: exec of /home/username/public_html/utility.cgi failed
[Tue Mar 26 09:13:16 2002] [error] [client x.x.x.x] Premature end of script headers: /home/username/public_html/script.cgi

Para corregir este error, ejecute el siguiente comando:

Si continúa experimentando un problema, verifique los permisos en el passwd archivo y shadow expediente.

Si eso no soluciona el problema, enviar una solicitud de soporte.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *