我的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”)工作正常,但我想重定向日志,因为它对我的工作非常重要。
答案 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。我以为我编辑并发布了回复,但似乎并非如此。很抱歉这么晦涩。