Intereting Posts
Как добавить запись в / etc / fstab для общей папки Windows? Развернуть переменную оболочки без globbing Доступ через Интернет через удаленный прокси, доступ к которому осуществляется через SSH Сообщение Gnome 3 не работает после переключения с XFCE 4 Как остановить рекламные ролики «Зеленые двойные подчеркнутые ссылки всплывающих окон» в Chromium? Микрофон – подавление статического фонового шума в Linux Ожидается, что скрипт возвращает ошибки при порождении bash-скрипта. Зачем? htop показывает различное количество процессов для браузера Chromium в Linux и FreeBSD mock config_opts , похоже, игнорируется Openbox: отключить Alt-F4 для каждого приложения Медленная реакция клавиатуры в некоторых Distros Экран гостевой Windows XP имеет неправильное соотношение сторон Использовать HAProxy для туннелирования SSH через https linux – отключить все видеовыходы Запустить редактор из сценария оболочки с текстом

Не удалось запустить запрошенную программу CGI: /www/cgi-bin/first.cgi: текстовый файл занят

Я пытаюсь сделать очень простой сценарий оболочки для запуска как CGI на сервере uhttpd, работающем на установке OpenWRT.

Файл называется /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 файл из командной строки, поэтому не знаю, как файл занят или даже как я узнаю.

Что я делаю не так?

    Прежде всего, я предполагаю, что файловая система /www сопоставляется с http://servername/ root, что означает, что папка /www/cgi-bin/ сопоставляется с http://servername/cgi-bin/ и, следовательно, вы должны быть вместо этого, вместо http://servername/cgi-bin/first.cgi .

    Возможно также, что процесс http-сервера не может читать, даже если вы можете. Режим файла должен быть 555 (r-xr-xr-x) или 550 (r-xr-x---) зависимости от того, принадлежит ли группа файлов группе, в которой находится httpd.

    Другая возможность заключается в том, что для $ (date) требуется командная оболочка, которая может быть недоступна во время выполнения. Постарайтесь без этого.

    Все еще не работает? Сервер может быть разборчивым, когда он позволяет выполнять CGI. Обычно разрешается только http://servername/cgi-bin/ , что означает, что вы находитесь в нужном месте по имени файла /www/cgi-bin/first.cgi. Документация uHTTPd, похоже, хочет установить папку CGI, иначе она не позволит CGI вообще. Проверьте это в файле конфигурации.

    Обратите внимание, что я отвечаю из общего фона Unixy, не зная о особенности OpenWRT или uHTTPd. У меня есть несколько десятилетий фона Unix / Linux, и общая архитектура мне очень знакома.

    Ответ (смущающий) заключается в том, что я использовал CAT для создания файла и нажатия Control-Z для завершения. Control-Z только толкает работу CAT в фоновом режиме, поэтому CAT все еще открывал файл. С помощью нажатия клавиши Control-D для завершения операции CATing в файл правильно закрывает файл и избавляется от ошибки «Text File Busy».