目前我正在开发一个项目,需要通过点击网页来创建虚拟机。
这是我的bash脚本,我用它来创建一个虚拟机,它工作正常但是当通过php调用时我无法运行这个脚本。
#!/bin/bash
set -e
if [ ! -f "/tmp/value.dat" ] ; then
value=0
else
value=`cat /tmp/value.dat`
fi
value=`expr ${value} + 1`
echo "${value}" > /tmp/value.dat
qemu-img create -f raw /var/lib/libvirt/images/disk$value.img 5.1G
virt-install --name=instance$value --ram=1024 --arch=i686 --vcpus=1 --os-type=linux --disk path=/var/lib/libvirt/images/disk$value.img,bus=virtio,format=raw --location ftp://10.21.40.227/ --extra-args "ks=ftp://10.21.40.227/ks.cfg" --autostart
这是我试图运行的php脚本
<?php
$bashfile = shell_exec("sudo /root/Desktop/install.sh");
echo "<pre>$bashfile<pre>";
?>
这是我在sudoers文件中的条目
apache ALL =(ALL)NOPASSWD:ALL
仍然我无法通过php建议一些解决方案来运行bash脚本。
答案 0 :(得分:0)
问题可能是未在shell中调用时$PATH
未正确设置。尝试使用qemu-img
和virt-install
的绝对路径。
我在这里看到的另一个问题是:你真的不希望Apache能够通过sudo
运行任何命令,对吗?将您的sudoers行更改为仅限于您的脚本:
apache ALL=NOPASSWD:/root/Desktop/install.sh