Entrega de archivos Python CGI en un Synology NAS
No puedo hacer que los archivos de Python se sirvan con Apache 2.2 o 2.4 sin un error 500. Tengo WebStation instalado, python, perl, php y Apache 2.2 y 2.4 instalados.
Puedo servir archivos estáticos muy bien con apache. Cuando trato de ofrecer un CGI de "hola mundo" más básico, obtengo un error 500. El error es
[cgid: error] [pid 10076: tid 140542621480832] (2) No existe tal archivo o directorio: AH01241: exec de ['/volume2/Development/WebRepo/cgi-bin/test.py' falló.
Intenté ejecutar tanto un script en perl como un script en python. Ambos se ejecutan correctamente desde una línea de comandos, pero no desde el servidor Apache (los mismos errores de "no existe tal archivo ..."). También tenga en cuenta que este es un error 500, no 404, por lo que está viendo el archivo. Puedo servir archivos HTML estáticos muy bien.
El script de Python no podría ser más simple:
#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello, World.";
Todos los archivos tienen 755 permisos. El camino a Python es correcto. No sé qué hacer a continuación.
Respuestas
Python puede servir scripts CGI listos para usar, usando http.server.CGIHTTPRequestHandler.
En mi Synology NAS tengo instalado el paquete oficial de Python3 (versión 3.8.2-0150). Puedo SSH en NAS adminy agregar un script:
mkdir -p app/cgi-bin
cat << EOF > app/cgi-bin/hello.py
#!/usr/bin/env python3
print('Content-Type: text/html')
print()
print('<html><body><h2>Hello World!</h2></body></html>')
EOF
Después de eso, puedo ejecutarlo así (tenga en cuenta que --directoryno tiene efecto, --cgiasí que estoy cdallí):
cd app && python3 -m http.server --cgi
Luego, en mi máquina, puedo curl http://nas:8000/cgi-bin/hello.py.
Ejecutando en el arranque
Puede ejecutar esto automáticamente al arrancar mediante el programador de tareas.
Panel de control → Programador de tareas → Crear → Tarea activada → Script definido por el usuario . Complete estos en la pestaña General :
- Tarea: Python CGI
- Usuario: admin
- Habilitado: [x]
Y script definido por el usuario en la pestaña Configuración de tareas :
cd /var/services/homes/admin/app
python3 -m http.server --cgi
Entonces puedes ejecutarlo manualmente. También debería ejecutarse al reiniciar.
Permisos
Si desea ejecutar la tarea como root, asegúrese de que los permisos de archivo sean correctos desde rootel punto de vista. En mi caso, hay discrepancia por alguna razón.
$ ls -l app/cgi-bin/hello.py -rwxrwxrwx+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py $ sudo ls -l app/cgi-bin/hello.py
Password:
-rwx--x--x+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py