#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 могла выполняться правильно и выдавала мне все ожидаемые выходные файлы.