cgi-bin中的Perl脚本不使用参数执行shell脚本

时间:2014-10-08 21:38:26

标签: linux perl shell cgi

我的perl脚本存在于cgi-bin / rel loaction中。这段代码存在问题:

system("./upd_test.sh $res_file $label >log/upload.log 2>&1 &"); ->does not work
system("./upd_test.sh"); ->works fine

我不明白为什么会这样。使用Apache服务器。

perl脚本的文件权限是

-rwxr-xr-x 1 root   apache 1935 Oct  8 12:37 upload_label.pl

shell脚本的文件权限是

-rwxrwxr-x 1 root   apache  945 Oct  8 14:27 upd_test.sh

如果我可以在没有参数的情况下调用shell脚本,那么当我用参数调用它时,为什么会出现这个问题?该脚本根本不会被调用。我在shell脚本中添加了一个打印件,该脚本写入/tmp位置以验证它是否被执行。

我刚刚发现如果我删除重定向它工作正常,所以系统(“./ upd_test.sh $ res_file $ label”)工作正常,但我想重定向日志,因为它对我的工作非常重要。

2 个答案:

答案 0 :(得分:0)

当前工作目录不是CGI脚本所在的目录,因此使用./将无效。

尝试使用FindBin(https://metacpan.org/pod/FindBin)获取目录,或者只是硬编码upd_test.sh脚本的完整路径。

但是......从CGI脚本运行system()(实际上是从网页上运行)是危险的。

答案 1 :(得分:0)

错误是权限,而不是重定向。我不得不对upd_test.sh做一个chown,所以主人是apache。 虽然如果我尝试运行./upd_test.sh $ res_file $ label> log / upload.log 2>& 1&在shell上它会抛出一个错误。 我认为在shell上调用它的正确方法是./upd_test.sh $ res_file $ label>& log / upload.log&。

P.S。我以为我编辑并发布了回复,但似乎并非如此。很抱歉这么晦涩。