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

3

我正在编写一个系统维护脚本,用于检查各种服务的状态(如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';

但是什么都没用。

有什么建议吗?

2个回答

2

尝试使用

echo 'yourpassword' | sudo -S command

我的root密码?我尝试了$command = 'echo ***** | sudo -u root -S /usr/bin/searchd';$dummy = system($command, $retval); ...但没有成功! - DS_web_developer
@DS_web_developer,请验证您是否提供了正确的密码,因为在我的机器上使用echo mypassword | sudo -u root mkdir /lib/test命令可以正常工作。 - Searock
@DS_web_developer 如果您正在使用root用户,则需要提供根密码,如果您已更改该密码。 - Searock
我正在提供与我登录控制台(putty)时使用的相同密码。尝试了mkdir命令,但没有创建目录:(... echo mypass | sudo -u root mkdir /lib/test - DS_web_developer
我想到了......密码应该用单引号括起来,就像这样 $command = "echo 'mypass' | sudo -u root ....."; - DS_web_developer

1

用户需要运行sudo的权限。特别是,您的 PHP 脚本正在运行的用户需要在 sudoers 文件中。有关该文件的信息,请参见man sudoers。使用 visudo 编辑 sudoers 文件。非常小心地给予您的 php/apache 用户运行 sudo 的权限。这可能是一个潜在的安全问题,可以让您的 PHP 脚本执行任何操作。


这是我添加到www-data ALL=NOPASSWD: /path/to/myscript.php的内容,但它不起作用 :( - DS_web_developer
我也尝试过:............... php ALL=(theuser) NOPASSWD: /path/to/myscript.php ...... 并使用 $command = 'sudo -u theuser service searchd start'; ... 仍然没有成功。 - DS_web_developer
你可能需要为每个命令(sudo和service)添加路径,因为你的PHP脚本的PATH环境与你的路径不同。例如:/usr/bin/sudo /usr/sbin/service ... - John Watson
也许你应该直接给apache运行SphinxSearch服务的权限,而不是尝试使用sudo。 - Yes Barry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接