PHP:执行服务启动(使用sudo)

PHP:执行服务启动(使用sudo),php,system,centos,sudo,Php,System,Centos,Sudo,我正在做一个系统维护脚本,检查各种服务的状态 (memcached、sphinx等) 我想从php脚本启动服务,如果它是关闭的 我成功地为memcache做到了以下几点: $command = 'memcached -d -m 800 -l 127.0.0.1 -p 11211 -u root start'; $dummy = system($command, $retval); 它工作得很好 现在我想为SphinxSearch服务做同样的事情 我试过了 $command = 'service

我正在做一个系统维护脚本,检查各种服务的状态 (memcached、sphinx等)

我想从php脚本启动服务,如果它是关闭的

我成功地为memcache做到了以下几点:

$command = 'memcached -d -m 800 -l 127.0.0.1 -p 11211 -u root start';
$dummy = system($command, $retval);
它工作得很好

现在我想为SphinxSearch服务做同样的事情

我试过了

$command = 'service searchd start';
但是没有结果。。。我读到我需要sudo来做这件事,所以我做了

$command = 'sudo service searchd start';
甚至

$command = '/usr/bin/sudo /usr/bin/searchd';
但什么都没用


有什么建议吗?

用户需要权限才能运行
sudo
。具体来说,您的PHP脚本正在运行的用户需要在sudoers文件中。有关该文件的信息,请参见
man sudoers
。使用
visudo
编辑sudoers文件。在授予php/apache用户运行sudo的权限时要非常小心。这是一个潜在的安全问题,允许您的PHP脚本执行任何操作。

尝试使用

echo 'yourpassword' | sudo -S command

这是我添加到www-data-ALL=NOPASSWD:/path/to/myscript.php中的内容,但它不起作用:(我还尝试了:…..php-ALL=(用户)NOPASSWD:/path/to/myscript.php……并使用它$command='sudo-u theuser-service searchd start';仍然没有成功您可能需要将路径添加到每个命令(sudo和service)因为PHP脚本的路径环境不同于您的路径。例如,
/usr/bin/sudo/usr/sbin/service…
也许您应该授予apache运行SphinxSearch服务的权限,而不是尝试使用sudo.my root pass?我尝试了$command='echo*****sudo-u root-S/usr/bin/searchd';$dummy=system($command,$retval)…不走运!@DS_web_developer验证您是否提供了正确的密码,因为我的机器上的
echo mypassword | sudo-u root mkdir/lib/test
@DS_web_developer我猜如果您使用的是root用户,您需要提供一个root密码,如果您已经更改了它。我是!我提供的密码与我在登录到我的控制台(putty)…也尝试了mkdir命令…但没有创建目录:(…echo mypass | sudo-u root mkdir/lib/testI解决了这个问题…poassword应该用单引号括起来,比如$command=“echo'mypass'| sudo-u root…”;