У меня есть сценарий 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.
Выполнение команд из Интернета не отличается от запуска их из системы. Основным виновником расхождений являются переменные среды и пути.
Проверьте переменные и путь между ними (выполняется из системы и выполняется с 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.
Выполнение команд из Интернета не отличается от запуска их из системы. Основным виновником расхождений являются переменные среды и пути.
Проверьте переменные и путь между ними (выполняется из системы и выполняется с 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.