Я работаю над сервером, на котором пользователи должны иметь возможность запускать белковые последовательности в базе данных, и он использует исполняемый файл под названием blastall. Сервер генерирует исполняемый файл, который затем должен запускаться в пакетном режиме. Однако, похоже, он не запущен. Вот пример сгенерированного исполняемого файла (cmd.sh):
#!/usr/bin/env sh
cd /var/www/dbCAN
php -q /var/www/dbCAN/tools/blast.php -e -w /var/www/dbCAN/data/blast/20121019135548
Где сумасшедшее число в конце — это автоматически сгенерированный идентификатор задания, основанный на том, когда задание было отправлено. Есть 2 проблемы, и я пытаюсь решить одну за другой. Первая проблема заключается в том, что при ручном выполнении (я просто запускаю ./cmd.sh) я получаю следующие ошибки:
sh: 1: /var/www/dbCAN/tools/blast/bin/blastall: not found
sh: 1: /var/www/dbCAN/tools/blast/bin/blastall: not found
sh: 1: -t: not found
Но для меня это не имеет особого смысла, так как указанный каталог на самом деле содержит blastall. Он имеет полные разрешения rwx, и каждый каталог на этом пути имеет соответствующие разрешения.
Файл blast.php в инструментах выглядит так:
try {
do_blast($opts["w"]);
$info['status'] = 'done';
$fp = fopen("$opts['w']/info.yaml","w")
fwrite($fp, Sypc::YAMLDump($info)); fclose($fp);
}
Конечно, с объявлениями переменных над ним, и функция do_blast выглядит так (опять же с объявленными над ней переменными и cd, чтобы работали каталоги):
function do_blast($workdir)
{
system("/var/www/dbCAN/tools/blast/bin/blastall -d data/blast/all.seq.fa -m 9 -p blastp -i $workdir/input.faa -o $workdir/output.txt")
system("/var/www/dbCAN/tools/blast/bin/blastall -d data/blast/all.seq.fa -p blastp -i $workdir/input.faa -o $workdir/output2.txt")
}
Любая идея, что может быть причиной этой проблемы? Я подумал, что это может быть потому, что я запускаю его, и он был создан apache, но rwx разрешен для всех пользователей. Я могу включить дополнительную информацию, если это необходимо, но я решил не делать этого сейчас, потому что первоначальный человек, который написал PHP, разбил все на множество маленьких файлов, поэтому трудно точно определить, где именно проблема. Любые идеи (если не полные решения) очень ценятся.
РЕДАКТИРОВАТЬ: решение найдено. Как оказалось, исполняемый файл blastall был скомпилирован в другой системе Linux. Переключился на другой исполняемый файл, и он работал безупречно.
system("ls -la /var/www/dbCAN/tools/blast/bin/blastall");
, чтобы узнать, распознает ли онblastall
,echo getcwd();
, чтобы проверить каталог (никогда не знаешь!), и system(ls -la data/blast/all.seq.fa). После этого можно только попробоватьstrace
. - person LSerni   schedule 22.10.2012die("/var/www/dbCAN/tools/blast/bin/blastall -d data/blast/all.seq.fa -m 9 -p blastp -i $workdir/input.faa -o $workdir/output.txt")
. Команда перестанет повторять то, что было бы выполнено. Затем выдайте себя за пользователяapache
и запустите ту же команду из оболочки. - person LSerni   schedule 22.10.2012