我正在尝试为客户端编写脚本,以便在需要时重置mysql服务。 (他们使用的是一种janky CMS / eccomerce,它有时会以奇怪的方式与数据库混淆,需要重置)
这个问题是shell_exec似乎没有工作,var_dump语句输出NULL并且mysql服务器没有重置。
执行重置的代码片段如下所示
$output = shell_exec('/usr/bin/sudo /bin/restartmysql');
var_dump($output);
/ bin / restartmysql是一个用于重新启动数据库的二进制包装器,它的源代码如下所示
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(char argc, char** argv) {
setuid(0);
system("/usr/sbin/service mysql restart");
return 1;
}
我已经加倍检查并且我的php.ini中没有禁用shell_exec,同时www-data具有执行restartmysql的正确权限
这是sudoers片段
www-data LOCAL=NOPASSWD:/bin/restartmysql
当重定向到stderr时,它显示它正在尝试使用sudo请求密码,由于权限在二进制包装器上的方式,实际上不需要密码。但是,当从命令中删除sudo时,我仍然会收到此错误。
string(106) "/usr/sbin/service: 127: /usr/sbin/service: stop: not found
/usr/sbin/service: 128: exec: start: not found
"