通过php执行bash脚本

时间:2016-11-02 09:04:16

标签: php linux bash shell

美好的一天,我正在尝试实施一个可以操作我的无线网络的网络界面。

其中一项操作是将我的卡配置为监控模式。很简单,如果你运行这个命令:

bash prepareCard.sh wlan0

脚本prepareCard.sh如下:

#! /bin/bash
IFACE=$1
ifconfig $IFACE down
iwconfig $IFACE mode monitor
ifconfig $IFACE up

现在我想通过php脚本执行这个脚本:

$cmd = shell_exec("bash prepareCard.sh wlan0");

当我检查卡是否已设置为监控模式时,没有!它还处于管理模式!! 你能告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:0)

调试BASH脚本的一个好方法是启用调试模式(通过在-x调用中将shell_exec标记传递给bash,运行set -x,或者在shebang中第#!/bin/bash -x行。这将向您展示执行bash脚本期间发生的事情。在你的情况下,我建议第一种情况,因为你不知道脚本是否首先被加载。

$cmd = shell_exec("bash -x prepareCard.sh wlan0");

之后,你的$ cmd变量应该有更多。

答案 1 :(得分:0)

假设运行脚本的webserver用户没有足够的权限,您可以尝试这种方式来修复它:

使用命令visudo修改/etc/sudoers并添加以下行:

ALL    ALL=(root) NOPASSWD: /absolute/path/prepareCard.sh

确保为脚本设置权限700,因此其他任何人都无法对其进行编辑。然后使用sudo执行您的脚本,如下所示:

$cmd = shell_exec("sudo /absolute/path/prepareCard.sh wlan0");

这应该以root身份执行脚本,而无需输入密码。