安装ISO时perl代码断开

时间:2012-08-16 18:38:21

标签: linux perl

我已经构建了一个表单(使用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!这些权限是我的表单不起作用的原因吗?我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:1)

您也可以尝试在命令周围使用qx( … ),而不是使用系统函数。

此运算符告诉Perl在shell中运行该命令。我发生了system将失败的情况,其中相同的命令将与qx一起运行。

我更倾向于尝试找出系统命令为何顽固的解决方案。

一个很好的区别是,虽然system将返回命令的退出值,qx将返回命令的输出,因此您可以将结果分配给变量并打印以进行调试目的。