Executar binário no apache2

0

Eu tenho um script CGI que estou executando no Apache 2. Ele consiste em vários comandos externos, entre os quais há um comando signalp :

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

Signalp é um script perl que utiliza o FASTA.pm presente em /usr/local/bin/signalp-4.1/lib e a arquitetura do sistema binário, ou seja, nnhowplayer.platform_architecture, , que para o meu sistema é nnhowplayer.Linux_x86_64 and it is located in /usr/local/bin/signalp-4.1/bin .

O problema é quando eu executo este comando no meu sistema ele funciona bem, mas sempre que eu tento executá-lo no servidor apache 2, ele dá o seguinte erro:

File /usr/local/bin/signalp-4.1/bin/nnhowplayer. cannot be found. 
    
por user8392790 17.05.2018 / 03:20

1 resposta

0

A execução dos comandos da Web não é diferente de executá-los no sistema. O principal culpado por discrepâncias é o ambiente variáveis e caminhos .

Teste as variáveis e o caminho entre os dois (executando a partir do sistema e executando a partir do Apache2) e corrija a discrepância.

Você pode verificar suas variáveis de ambiente e caminhos do Apache2 com estas etapas:

Crie um script simples para mostrar seu ambiente:

/usr/local/bin/set.sh

#!/bin/bash

set

Execute-o na Web usando PHP ou Perl:

Usando o Perl:

#!/usr/bin/perl

use warnings;
use strict;

print "\n\n";

print system("/usr/local/bin/set.sh");

Usando o 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>

O melhor lugar para começar será certificar-se de ter os caminhos do seu login incluídos no caminho do programa em execução no Apache2.

Neste caso, o Apache2 está relatando isso para o caminho:

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

Ao correr do terminal, recebo isto:

/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

Se você testar a adição de todas as variáveis de caminho à sua instância da Web durante a execução do programa, deverá obter os mesmos resultados obtidos ao executá-lo a partir do terminal. Depois de executá-lo, você pode aparar sistematicamente os elementos de caminho que você acha desnecessários, como /usr/games , /usr/local/games e /snap/bin .

    
por L. D. James 17.05.2018 / 04:29