¿Errores tipo “terminated by calling exit with status ‘118’” en FastCGI?


Puede que recibas errores tipo

[Fri Jul 18 09:29:45 2008] [warn] FastCGI: (dynamic) server “/home/anyeos/Mi Web/fcgi-bin/holamundi” (pid 22584) terminated by calling exit with status ‘118’

en el log de error de tu apache. Eso es porque el script terminó de una forma no deseada, pero ¿Qué es ese ‘118’? Aparentemente no es información muy útil ya que se supone que debería ser un código “errno” del sistema. El mensaje de ese tipo de códigos puede ser leído con el programa “perror”.

Así que:

perror 118
OS error code 118: Not a XENIX named type file

No tiene sentido, ¿Cómo nuestro script largó un error “Not a XENIX named type file”? Pues tal vez tenga algo de sentido porque estaríamos teniendo problemas de permisos ya que normalmente los permisos son la causa.

¿Cómo supe que la causa normalmente es esa? Pues porque estaba usando suexec y resulta que suexec estaba prohibiendo la ejecución del archivo porque estaba permitido escribir por el grupo (rwx rwx r-x) y eso a suexec “no le gusta”. Pues, entonces supuse que podría ser eso así que probé quitarle ese permiso (dejándolo rwx r-x r-x) y, ¡Sorpresa! ¡Funcionó! Esa era la causa ya que las configuraciones en Apache estaban bien.

Lo mismo me sucedió con un script de otro usuario que devolvía un exit code 108. Eran problemas de permisos, suexec negaba su ejecución por culpa de que en suexec.h AP_GID_MIN era 500 y dicho usuario pertenecía a un grupo cuyo GID empezaba en 100.

Lo de permitido escribir por el grupo suexec lo entiende como “otros”. Así que en lugar de decirte que el archivo tiene el permiso de escritura para el grupo te va a decir: “El archivo fulano es escribible por otros”.

Esos detalles son los que prestan a la confusión y uno a veces interpreta mal los errores.

Pero cuando se trata de problemas de permisos FastCGI nunca va a poder darte un mensaje claro (menos si está ejecutando a través de suexec) por lo que vas a recibir mensajes como el mencionado arriba diciéndote que el proceso salió con un código de salida 100 y algo. Lo que encima desorienta más porque no se sabe cómo es que compone ese número. He mirado el código fuente y no he descubierto de donde proviene el número completo ya que supuestamente utiliza las funciones clásicas del base del sistema y debería dar un resultado que tenga sentido para perror. Pero a lo mejor es una acumulación de varios códigos y hay que hacer una resta para encontrar el número buscado. No lo sé la verdad, si alguien lo descubre, me gustaría que me dijera cómo funciona😛

Otra causa pero un poco menos común fue que tenía declarado: “Options None” antes de “Options ExecCGI” en la parte donde configuro el directorio de los CGI de usuarios como muestro a continuación:

<Directory “/home/*/Mi Web/fcgi-bin”>
SetHandler fastcgi-script
Options None <- Este era el que causaba un exit status 116.
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Curioso, ¿¿no?? Algo extraño ya que los cgi normales se podían ejecutar bien. ¿Pero entonces? Bueno, cosas de los módulos, es probable que el módulo fastcgi o la combinación del mismo con suexec hicieran que tomara el primer Options y no el segundo como normalmente debería ser.
Muy bien, espero haberles sido de ayuda y me despido hasta la próxima.😀

  1. Deja un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: