Запустить двоичный файл на apache2

У меня есть сценарий CGI, который я запускаю на Apache 2. Он состоит из нескольких внешних команд, среди которых есть одна команда signalp:

./signalp -t -m mature.fsa -euk -f all input.fsa > output.fsa

Signalp - это Perl-скрипт, который использует FASTA .pm присутствует в /usr/local/bin/signalp-4.1/lib, а бинарная системная архитектура, т. е. nnhowplayer.platform_architecture,, которая для моей системы nnhowplayer.Linux_x86_64 and it is located in /usr/local/bin/signalp-4.1/bin.

Проблема в том, что когда я запускаю эту команду в своей системе, она работает нормально, но всякий раз, когда я пытаюсь запустить ее на сервере apache 2, она дает следующую ошибку:

File /usr/local/bin/signalp-4.1/bin/nnhowplayer. cannot be found.
0
задан 17 May 2018 в 06:46

2 ответа

Выполнение команд из Интернета не отличается от запуска их из системы. Основным виновником расхождений являются переменные среды и пути.

Проверьте переменные и путь между ними (выполняется из системы и выполняется с Apache2) и исправьте несоответствие.

variables

Создайте простой скрипт, чтобы показать вашу среду:

/usr/local/bin/set.sh

#!/bin/bash set

Запустите его в Интернете либо с помощью PHP или Perl:

Запустите его в Интернете либо с помощью PHP или Perl:

#!/usr/bin/perl use warnings; use strict; print "\n\n"; print system("/usr/local/bin/set.sh");

Использование PHP:

<html> <head> <title>PHP Test</title> </head> <body> <pre> <?php echo '<p>Hello World</p>'; system("/usr/local/bin/set.sh"); ?> </pre> </body> </html>

Лучшее место для запуска - убедиться, что у вас есть пути от вашего входа, включенные в путь программы, запущенной на Apache2.

В этом случае Apache2 сообщает об этом для пути:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

При запуске с терминала я получаю следующее:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

Если вы тестируете добавление всех переменных пути к вашему веб-экземпляру во время запуска программы, вы должны получить те же результаты, что и вы получаете, когда запускаете его с терминала. После того, как вы его запустили, вы можете систематически обрезать элементы пути, которые вам не нужны, например /usr/games, /usr/local/games и /snap/bin.

0
ответ дан 17 July 2018 в 14:06

Выполнение команд из Интернета не отличается от запуска их из системы. Основным виновником расхождений являются переменные среды и пути.

Проверьте переменные и путь между ними (выполняется из системы и выполняется с Apache2) и исправьте несоответствие.

variables

Создайте простой скрипт, чтобы показать вашу среду:

/usr/local/bin/set.sh

#!/bin/bash set

Запустите его в Интернете либо с помощью PHP или Perl:

Запустите его в Интернете либо с помощью PHP или Perl:

#!/usr/bin/perl use warnings; use strict; print "\n\n"; print system("/usr/local/bin/set.sh");

Использование PHP:

<html> <head> <title>PHP Test</title> </head> <body> <pre> <?php echo '<p>Hello World</p>'; system("/usr/local/bin/set.sh"); ?> </pre> </body> </html>

Лучшее место для запуска - убедиться, что у вас есть пути от вашего входа, включенные в путь программы, запущенной на Apache2.

В этом случае Apache2 сообщает об этом для пути:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

При запуске с терминала я получаю следующее:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

Если вы тестируете добавление всех переменных пути к вашему веб-экземпляру во время запуска программы, вы должны получить те же результаты, что и вы получаете, когда запускаете его с терминала. После того, как вы его запустили, вы можете систематически обрезать элементы пути, которые вам не нужны, например /usr/games, /usr/local/games и /snap/bin.

0
ответ дан 20 July 2018 в 14:10
  • 1
    Я попытался запустить его с помощью Perl, он говорит: Нет такого файла или каталога: exec из '/usr/lib/cgi-bin/set.cgi не удалось – user8392790 17 May 2018 в 05:44
  • 2
    Как вы пытались запустить скрипт Perl? На всякий случай, если у вас возникли проблемы с настройкой Apache для запуска скриптов Perl, я также представил пример PHP. Что вы получили для пути при запуске PHP-скрипта из Apache2? – L. D. James 17 May 2018 в 05:50
  • 3
    Я думаю, что нет проблем с запуском perl-скриптов на apache, потому что другие скрипты работают нормально. Я запустил этот скрипт как cgi из папки cgi-bin и дал ошибку, упомянутую выше. – user8392790 17 May 2018 в 06:14
  • 4
    Каким методом вы пытались запустить Perl-скрипт в Интернете? Каков результат запуска скрипта Perl в автономном режиме? Поскольку в скрипте нет каких-либо специальных переменных среды, он должен давать тот же вывод в Интернете, что и в автономном режиме. – L. D. James 17 May 2018 в 06:17
  • 5
    Я не понимаю, что вы подразумеваете под этим методом. Я сохранил файл perl как set.cgi в моей папке cgi-bin и set.pl, запущен на apache и терминале соответственно. Но при запуске на apache он дает ошибку при работе на терминале. – user8392790 17 May 2018 в 06:21

Другие вопросы по тегам:

Похожие вопросы: