Странно ~ Apache не может найти реально существующий «bash» для выполнения моего файла cgi ~ - PullRequest
0 голосов
/ 25 сентября 2011

Может быть, вам слишком легко ответить. Моя проблема связана с веб-сервером cgi и apache. Сделайте это просто, у меня есть HTML "form.html", содержащий форму в нем. Чтобы получить к нему доступ, наберите «127.0.0.1/form.html» в браузере. После нажатия кнопки «отправить» в этом html-файле он должен перейти по адресу «127.0.0.1 \ cgi-bin \ cginame.cgi», содержимое «cginame.cgi» выглядит следующим образом:

#!/bin/bash

if [ $REQUEST_METHOD="GET" ]
then
data=$QUERY_STRING
else
data='cat'
fi
java mortcal $data

"mortcal" - это Java-программа, которая вычисляет и возвращает пользователю HTML-страницу с результатами. Я использую Apache 2.2 и Ubuntu 10.04. Проблема в том, что когда я нажимаю кнопку «отправить» в «form.html», я получаю их в журнале ошибок:

[Sat Sep 24 15:00:20 2011] [error] (2)No such file or directory: exec of '/usr/lib/cgi-bin/mortcgi.cgi' failed
[Sat Sep 24 15:00:20 2011] [error] [client 127.0.0.1] Premature end of script headers: mortcgi.cgi

Я знаю, это потому, что apache не может найти "/ bin / bash" для выполнения файла cgi. Но у меня есть "/ bin / bash". Это так странно. Пожалуйста, помогите мне. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2011

Как уже отмечалось, это плохой способ сделать что-то, но:

  1. Разрешают ли права доступа к файлу сценария пользователю веб-сервера?
  2. Используете ли вы какую-либо инфраструктуру безопасности, такую ​​как selinux, которая будет накладывать дополнительные ограничения?
0 голосов
/ 25 сентября 2011

Я проверил мои файлы конфигурации. Они в порядке. Поэтому я продолжил поиск в Интернете и, наконец, увидел это:

"Если вы скопировали сценарий с компьютера с Windows, возможно, вас остановили на ^ M в конце строки. Вы можете использовать cat -v /usr/lib/cgi-bin/printenv.pl | голову -1, чтобы убедиться, что в конце строки нет ^ M. "

Я скопировал мой cgi-файл из windows! Я забыл упомянуть об этом, потому что я не думал, что это имеет большое значение.

Теперь я удалил ^ M, набрав это ":% s / ^ V ^ M // g в vi. Эта проблема решена. Большое спасибо за ваш ответ, мистер Харрисон и Dark Falcon, Спасибо всем .

0 голосов
/ 25 сентября 2011

Для выполнения сценариев CGI вам необходимо настроить Apache, чтобы разрешить это, и ваш сценарий должен следовать протоколу HTTP, отправляя данные в правильном формате, с соответствующими разрешениями, и так далее, и так далее.

Вот отличный учебник с примером: http://httpd.apache.org/docs/2.2/howto/cgi.html

... однако, я должен сказать: запуск java-программы из скрипта оболочки через Apache - вообще плохая идея. Каждый запрос загружает Java Runtime Engine (JRE), запускает программу, а затем выгружает ее. Есть проблемы со средой, владением файлами и т. Д. - вот почему существуют серверы приложений, такие как tomcat для java. Так что, если вы просто что-то пытаетесь, это нормально. Если вы думаете, что это хороший способ сделать что-то в профессиональной производственной среде, я бы пересмотрел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...