2016-12-13 2 views
0

Я пытаюсь запустить простой скрипт cgi, который находится на моем iMac (установленном Yosemite) с компьютера под управлением Windows 10.Запуск сценария CGI на Yosemite/Apache с другого компьютера

Вот say_test01 скрипта (обратите внимание, что я попытался с .cgi в конце, но это тоже не работает)

#!/bin/bash 

    echo -e "Content-type: text/html\n" 

    cat << junk 
    <html> 
    <head> 
    <title> 
    saying 
    </title> 
    </head> 
    <body> 
    junk 

    #----------------------- 
    osascript -e "set volume 8" 
    say -v Whisper This is just wrong! 
    osascript -e "set volume 4" 
    say -v Whisper This is OK! 

    #----------------------- 
    cat << junk 
    </body> 
    </html> 
    junk 

На ИМАКЕ я бег Apache v2.4.16.

На iMac, с терминала, я могу ввести ./say_test01, и я слышу голос, произносящий фразу.

Опять же, на iMac, но из браузера, когда я ввожу localhost/cgi-bin/say_test01 все, что я вижу, это содержимое файла.

Насколько я понимаю, от чтения других потоков, это потому, что система не знает, какое приложение связано с этим файлом.

Когда я бегу из браузера на моем компьютере Win10 команду 192.168.1.55/cgi-bin/saysomething я либо увидеть содержимое файла отображается или я получаю сообщение об ошибке «Этот сайт не может быть достигнуто ».

Я ищу некоторую помощь в выяснить это ...

В httpd.conf вот некоторые выдержки:

Эти линии имеют «#» удалены:

LoadModule authz_host_module libexec/apache2/mod_authz_host.so 

LoadModule authz_core_module libexec/apache2/mod_authz_core.so 

LoadModule cgi_module libexec/apache2/mod_cgi.so 

LoadModule userdir_module libexec/apache2/mod_userdir.so 

LoadModule alias_module libexec/apache2/mod_alias.so 

Вот Справочник раздел:

<Directory "/Library/WebServer/CGI-Executables"> 
    AddHandler cgi-script .cgi 
    Options FollowSymLinks +ExecCGI 
    AllowOverride None 
    Require all granted 
</Directory> 

И наконец эта линия имеет '#' удален

Включить /private/etc/apache2/extra/httpd-userdir.conf

В файле HTTPD-userdir.conf , следующая строка имеет '#' удален

Включить /private/etc/apache2/users/*.conf

В /и т.д./apache2/пользователей каталог У меня есть файл Name.conf, который имеет следующий код

<Directory "/Users/Name/Sites/"> 
    AllowOverride All 
    Options Indexes MultiViews FollowSymLinks  
    Require all granted 
</Directory> 

Я не прикасался файл виртуального хоста, потому что я не думаю, что (?) он применяется здесь.

Моя конечная цель - передать параметры с другого компьютера (малина pi), возможно, используя код python для скрипта cgi, чтобы iMac мог «сказать», что я хочу ... (например, сегодняшняя погода, свет только что включился ...и т. д.)

Любые предложения о том, как я могу заставить это работать?

Edit:

Используя предложение, глядя на журнал ошибок, я увидел, что мой httpd.conf была ошибка. Линия Опции FollowSymLinks + ExecCGI дал мне сообщение об ошибке, в котором говорилось, что мне нужно иметь «+» перед всеми параметрами или без параметров! Поэтому я изменил строку на Опции + FollowSymLinks + ExecCGI. Теперь он работает хорошо.

Теперь я отправляю сообщение http GET от своего ISY994i (контроллера Insteon) к малине pi3. На pi я установил HTTPServer, который ждет инструкции GET. После получения он запускает скрипт python на pi, который анализирует файл xml погоды (который я ранее создал для моего приложения iRule, используя wunderground.com в качестве источника) и извлекает прогноз погоды текущего дня, который является текстовым описательным абзацем; он затем переформатирует текстовый прогноз, чтобы iMac мог сказать это правильно; и, наконец, используя urllib2, он запускает iMac, чтобы «сказать» о погоде. Я все еще сталкиваюсь с проблемой на pi, устанавливая HTTPServer для автоматического запуска при перезагрузке, но он работает хорошо, когда я запускаю его вручную. Я открою новый вопрос, чтобы получить помощь в разрешении этого.

ответ

0

Первое, что нужно отметить, это то, что скрипты, проходящие через веб-сервер, вряд ли будут иметь разрешения на то, чтобы все произошло так, как говорят на компьютере. У пользователя веб-сервера не будет доступа для доступа к этой части системы. Вам было бы лучше сделать это через ssh.

Однако для того, чтобы получить вас возможность запускать скрипты через веб-сервер, как просили, вот:

Вам нужно добавить расширение .cgi в сценарий. Вы обработчик создан для расширения .cgi:

AddHandler cgi-script .cgi 

Так что это только будет работать для сценариев, которые имеют это расширение. В настоящее время у вас их нет. Я знаю, вы говорите, что попробовали, но без него это не сработает. Поэтому верните его и посмотрите, работает ли он сейчас. Если это не так, не снимайте его снова. Это необходимо. Дайте мне знать, как вы поживаете.

+0

Интересно, что у меня было это несколько лет назад с более старой версией ОС и на том же iMac. Однако жесткий диск скончался, и я потерял большую часть настроек. Я также обновил ОС до Yosemite, который, похоже, обрабатывает вещи по-другому, чем OS, на котором я был ранее. Одним из элементов, в частности, является WebSharing. Я также понял, что мне не нужен .cgi, если скрипт находился в определенном каталоге, который для меня является/Library/WebServer/CGI-Executables! – Gary

+0

Вам не нужно расширение .cgi, но для этого требуется другая конфигурация. С вашей конфигурацией это необходимо. Как я уже объяснил. Вы пытались добавить его обратно? – SuperDuperApps

+0

Ok Я скопировал файл say_test01 и создал say_test01, cgi. Теперь ни один файл не работает из браузера на iMac! Я даже не вижу содержимое файла. Браузер просто, кажется, висит! Вот что я вижу с ls -l -rwxr-xr-x 1 Sarah wheel 429 13 декабря 14:28 say_test01 -rwxr-xr-x 1 Sarah wheel 429 13 декабря 16:33 say_test01. cgi – Gary