我正在一个服务器上工作,用户应该能够对数据库运行蛋白质序列,它使用一个名为 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
末尾的疯狂数字是根据作业提交时间自动生成的作业 ID。有两个问题,我试图一次解决一个。第一个问题是,当手动执行(我只是运行 ./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 系统上编译的。切换到不同的可执行文件,它运行完美。