我已经构建了一个表单(使用JavaScript,jQuery,PHP和HTML),这使得非技术人员可以轻松编写和触发创建包含CentOS Linux的ISO映像的命令以及随之构建的公司应用程序。它。这是带有样本变量的实际命令。
./test.pl --verbose --output tvmTEST.iso --virtual --isv 4.1.5.1.4147.8.0 --64bit --netproto static --hostname tvmTEST --address 192.168.5.235 --netmask 255.255.255.0 --gateway 192.168.5.252 --nameserver 192.168.5.21,192.168.5.2
当以root身份登录并且ISO成功创建时,从shell触发时,此确切命令正常工作。但是,它无法通过GUI工作。表单正确组成命令并将其传递给我调用perl程序的PHP代码。我在shell中测试了由PHP程序组成的命令,它创建了ISO!构建ISO映像的Here is the perl program。它通过表单触发时作为用户apache运行。但是,它在第665行死亡,它说:
system("sudo mount -o loop $c{centosiso} $mp") and die;
我尝试打印上面传递给system()
的字符串并打印出来:
sudo mount -o loop /tmp/test.pl-cache/CentOS-5.4-x86_64-bin-1of7.iso /mnt/CentOS
所以,我尝试通过shell启动此命令,它实际上安装了ISO!但是,/mnt/CentOS
的权限已更改为755
。我不清楚为什么?请注意,我在上面的那行中使用和不使用sudo
对其进行了测试。
在此之前,/mnt/CentOS
的权限设置为777
,所有者设置为apache
!这些权限是我的表单不起作用的原因吗?我是在正确的轨道上吗?
答案 0 :(得分:1)
您也可以尝试在命令周围使用qx( … )
,而不是使用系统函数。
此运算符告诉Perl在shell中运行该命令。我发生了system
将失败的情况,其中相同的命令将与qx
一起运行。
我更倾向于尝试找出系统命令为何顽固的解决方案。
一个很好的区别是,虽然system
将返回命令的退出值,qx
将返回命令的输出,因此您可以将结果分配给变量并打印以进行调试目的。