我尝试使用php/html
按钮执行bash脚本以唤醒我的鼻子。
<form action="" method="POST">
<input type="submit" value="Wake NAS" name="zero" />
</form>
<?php
if (isset($_POST["zero"])){
#echo "Hello World!";
shell_exec("/var/www/html/wakenas.sh &");
}?>
按下按钮时会打印“Hello World”。
但代码不会被执行。
wakenas.sh
看起来像这样,如果我在shell上执行它
#!/bin/bash
etherwake -D "BC:5F:F4:09:E1:07"
echo "why!?!?!" > "/var/www/html/works.txt"
exit 1
wakenas.sh
拥有所有权利
也许你们知道为什么它不会被执行。
提前致谢
答案 0 :(得分:0)
来自您的转储:
etherwake: This program must be run as root.
当你执行wakenas.sh时,你可能正在以root身份执行它。这就是它起作用的原因。
将sudo权限(无密码)提供给运行php服务器的用户。
将wakenas.sh改为:
#!/bin/bash
sudo etherwake -D "BC:5F:F4:09:E1:07"
echo "why!?!?!" > "/var/www/html/works.txt"
exit 1
答案 1 :(得分:0)
我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以作为root),它解决了exec()和shell_exec()的限制。在此处获取:https://github.com/merlinthemagic/MTS
下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd("etherwake -D \"BC:5F:F4:09:E1:07\"");
//the return will be a string containing the return of the command
echo $return1;
答案 2 :(得分:0)
执行脚本的简单而安全的方法是放入sudoers。假设您的Linux发行版是Debian基础,运行Web服务器的用户是www-data
,那么您可以创建一个文件,例如/etc/sudoers.d/wakeup_ether
Cmnd_Alias WAKE_UP_CMD = /var/www/html/wakenas.sh
www-data ALL=NOPASSWD: WAKE_UP_CMD
修改脚本,使命令前加sudo
。
shell_exec("sudo /var/www/html/wakenas.sh &");