PHP не может вызвать команду (Prokka), использующую файл оболочки, не из файла C.

#php #html #c #shell #web

#php #HTML #c #оболочка #веб

Вопрос:

Prokka — это инструмент, используемый для аннотирования бактериальных геномов, который можно установить и получить с помощью командной строки в локальной системе или на сервере.

Итак, я загрузил Prokka с помощью Git clone ( git clone https://github.com/tseemann/prokka.git ) и выполнил ее на сервере CentOS (7) вместе со всеми зависимостями с последней версией (NCBI-BLAST 2.10.1, hmmer 3.3, gnu Parallel).

Чтобы создать сервер прогнозирования, я создал веб-страницу с использованием PHP, и в этом PHP-файле я принимаю входные данные от пользователя и передаю эти входные данные в файл оболочки и пытаюсь выполнить этот файл оболочки с помощью функции shell_exec() . Вот $fileName and $fn входные данные, взятые с веб-страницы.

 $output = shell_exec("./path/to/shell/file/invoke.sh  $script_path/$fileName  $fn"); 
echo "<pre>$output</pre>"; 
  

вызов.файл sh:

 input_genome="$1";
prefix_genome="$2";
/path/to/prokka/bin/prokka $input_genome --outdir ./results/"$prefix_genome"  --prefix $prefix_genome --locustag $prefix_genome --cpus 8 --kingdom Bacteria
  

Теперь, если я вызываю Prokka ( /path/to/prokka/bin/prokka ) непосредственно из командной строки, он работает нормально и создает все файлы, которые в идеале он должен создать. Более того, если я запускаю сценарий оболочки ( invoke.sh ) для вызова Prokka ( /path/to/prokka/bin/prokka ), он снова работает нормально и генерирует все файлы.
Ожидаемые и фактические выходные файлы:

 seq.faa
seq.err
seq.fna
seq.txt
seq.ffn
seq.gff
seq.tsv
seq.fsa
seq.gbk
seq.tbl
seq.log
seq.sqn
  

Но проблема в том, что пока я запускаю файл PHP из веб-браузера, как упоминалось выше, для запуска файла оболочки (invoke .sh) он выполняется, но команда Prokka выполняется неправильно внутри файла оболочки и, следовательно, не генерирует все выходные файлы.

Я проверил error_log, он показал мне это:

 [23:43:57] Will use blast to search against /home/group01/html/csspred/prokka/db/kingdom/Bacteria/sprot with 8 CPUs
[23:43:57] Running: cat /home/group01/html/csspred/results/01-Nov-23_43_779958414/seq/seq.sprot.tmp.18401.faa | parallel --gnu --plain -j 8 --block 3279 --recstart '>' --pipe blastp -query - -db /home/group01/html/csspred/prokka/db/kingdom/Bacteria/sprot -evalue 1e-09 -qcov_hsp_perc 80 -num_threads 1 -num_descriptions 1 -num_alignments 1 -seg no > /home/group01/html/csspred/results/01-Nov-23_43_779958414/seq/seq.sprot.tmp.18401.blast 2> /dev/null
[23:44:00] Could not run command: cat /home/group01/html/csspred/results/01-Nov-23_43_779958414/seq/seq.sprot.tmp.18401.faa | parallel --gnu --plain -j 8 --block 3279 --recstart '>' --pipe blastp -query - -db /home/group01/html/csspred/prokka/db/kingdom/Bacteria/sprot -evalue 1e-09 -qcov_hsp_perc 80 -num_threads 1 -num_descriptions 1 -num_alignments 1 -seg no > /home/group01/html/csspred/results/01-Nov-23_43_779958414/seq/seq.sprot.tmp.18401.blast 2> /dev/null
  

и сгенерировал только четыре файла :

 seq.HAMAP.hmm.tmp.12617.faa
seq.HAMAP.hmm.tmp.12617.hmmer3
seq.fna
seq.log 
  

Я даже использовал файл C для вызова файла оболочки execute a, который в конечном итоге вызывает команду Prokka, но снова проблема осталась прежней.

PHP: $output = shell_exec("./invoke.out $script_path/$fileName $fn");

C:

 `int main(int argc, char *argv[])                                                                                            
{                                                                                                                                         
char command[1000];                                                                                                                                                    
sprintf(command, "%s %s %s", "sh /home/group01/html/csspred/scripts/CSS_pred_new_additions/prokka_test.sh", argv[1], argv[2]);                                         
system(command);
}`
  

В чем проблема и как ее решить? Я просто хотел выполнить свой вызов.sh или invoke.out, чтобы на серверной части моя команда Prokka могла выполняться правильно и выдавала мне все ожидаемые выходные файлы.