找不到文件,但文件存在

时间:2012-10-22 18:16:08

标签: php apache bash permissions blast

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

2 个答案:

答案 0 :(得分:1)

脚本中的相对路径是否会出现问题?在这里看到我的答案,也许有帮助:

finding a file in php that is 4 directories up

答案 1 :(得分:0)

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