1

我正在一个服务器上工作,用户应该能够对数据库运行蛋白质序列,它使用一个名为 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 系统上编译的。切换到不同的可执行文件,它运行完美。

4

2 回答 2

1

可能是脚本中的相对路径有问题吗?在这里查看我的答案,也许它会有所帮助:

在php中找到一个4个目录的文件

于 2012-10-22T18:23:23.317 回答
0

解决方案是重新编译blastall 可执行文件。它是为 Redhat 编译的,我使用的是 Ubuntu。不幸的是,我认为给我的可执行文件是针对我的系统的,而不是以前的。

于 2012-10-24T20:19:58.273 回答