Não é possível iniciar o programa CGI solicitado: /www/cgi-bin/first.cgi: arquivo de texto ocupado

3

Estou tentando fazer um script de shell muito simples para ser executado como um CGI em um servidor uhttpd em execução em uma instalação do OpenWRT.

O arquivo é chamado de /www/cgi-bin/first.cgi e parece com ...

#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<html><head><title>Bash as CGI"
echo "</title></head><body>"
echo "<h1>Hello world</h1>"
echo "Today is $(date)"
echo "</body></html>"

... e eu fiz um

chmod +x first.cgi

no arquivo.

Quando tento parar ...

http://192.168.15.1/cgi-bin/first.cgi

... o navegador fica ...

Unable to launch the requested CGI program:
/www/cgi-bin/first.cgi: Text file busy"

Eu posso cat e vi o arquivo de um prompt de shell, então não tenho certeza de como o arquivo está ocupado ou até mesmo como eu iria descobrir.

O que estou fazendo de errado?

    
por bigjosh 31.03.2014 / 18:24

2 respostas

2

Antes de tudo, estou supondo que o sistema de arquivos /www esteja mapeado para http://servername/ root, o que significa que a pasta /www/cgi-bin/ mapeia para http://servername/cgi-bin/ e, portanto, você deve procurar http://servername/cgi-bin/first.cgi .

Também pode ser que o processo do servidor http não possa ser lido, mesmo que você possa. O modo de arquivo deve ser 555 (r-xr-xr-x) ou 550 (r-xr-x---) dependendo se a propriedade do grupo de arquivos for para o grupo em que o httpd está.

Outra possibilidade é que o $ (date) requeira um comando shell-external, que pode não estar disponível em tempo de execução. Tente sem isso.

Ainda não está funcionando? O servidor pode ser exigente sobre onde ele permite a execução de CGI. Normalmente apenas http://servername/cgi-bin/ é permitido, o que significa que você está no lugar certo em filename /www/cgi-bin/first.cgi. A documentação do uHTTPd parece querer que a pasta CGI seja definida, senão não permitirá CGI. Verifique isso no arquivo de configuração.

Por favor, note que eu estou respondendo de um fundo genérico do Unixy, não sabendo muito sobre os detalhes do OpenWRT ou do uHTTPd. Eu tenho várias décadas de experiência Unix / Linux e a arquitetura genérica é muito familiar para mim.

    
por 31.03.2014 / 19:03
0

A resposta (embaraçosa) é que eu estava usando o CAT para criar o arquivo e pressionando Control-Z para finalizar. Control-Z apenas coloca o trabalho CAT em segundo plano, então o CAT ainda tinha o arquivo aberto. Usando o controle-D pressionamento de tecla para concluir CATing no arquivo corretamente fecha o arquivo e se livrar do erro "Arquivo de texto ocupado".

    
por 02.04.2014 / 00:13