OpenWRT 설치에서 실행되는 uhttpd 서버에서 CGI로 실행하기 위한 매우 간단한 쉘 스크립트를 만들려고 합니다.
파일이 호출되고 /www/cgi-bin/first.cgi
다음과 같습니다.
#!/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>"
...내가 하나 만들었어요
chmod +x first.cgi
파일에.
끌어올리려고 하면..
http://192.168.15.1/cgi-bin/first.cgi
...브라우저는...
Unable to launch the requested CGI program:
/www/cgi-bin/first.cgi: Text file busy"
cat
쉘 프롬프트에서 파일을 가져올 수 있으므로 vi
파일이 얼마나 바쁜지, 심지어 어떻게 알아내는지도 잘 모르겠습니다.
내가 뭘 잘못했나요?
답변1
첫째, 파일 시스템이 루트 /www
에 매핑되어 있다고 추측합니다 . 즉, 폴더가 에 매핑되어 있으므로 해당 .http://servername/
/www/cgi-bin/
http://servername/cgi-bin/
http://servername/cgi-bin/first.cgi
읽을 수는 있어도 http 서버 프로세스가 읽지 못하는 경우도 있습니다. 파일 모드는 파일 그룹 소유권이 httpd와 동일한 그룹에 속하는지 여부에 따라 달라집니다 555 (r-xr-xr-x)
.550 (r-xr-x---)
또 다른 가능성은 $(date)에 런타임에 사용할 수 없는 쉘 외부 명령이 필요하다는 것입니다. 그것 없이는 시도하지 마십시오.
그래도 작동이 안되는? 서버는 CGI 실행을 허용하는 위치에 대해 까다로울 수 있습니다. 이것은 일반적으로 http://servername/cgi-bin/
허용됩니다. 이는 파일 이름이 /www/cgi-bin/first.cgi인 올바른 위치에 있음을 의미합니다.uHTTPd 문서CGI 폴더를 설정해야 할 것 같습니다. 그렇지 않으면 CGI가 전혀 허용되지 않습니다. 이는 구성 파일에서 확인하시기 바랍니다.
나는 일반적인 Unixy 배경에서 답변하고 있으며 OpenWRT 또는 uHTTPd의 세부 사항에 대해 많이 알지 못합니다. 저는 수십 년 동안 Unix/Linux를 사용해 왔으며 일반적인 아키텍처에 매우 익숙합니다.
답변2
(당황스러운) 대답은 CAT을 사용하여 파일을 만들고 Ctrl-Z를 눌러 완료했다는 것입니다. Control-Z는 CAT 작업을 백그라운드로 푸시하므로 CAT에서는 여전히 파일을 열어 둡니다. Ctrl-D 키 입력을 사용하여 파일에 대한 CAT 작업을 올바르게 완료하면 파일이 닫히고 "텍스트 파일 사용 중" 오류가 제거됩니다.