【发布时间】:2013-02-09 12:10:46
【问题描述】:
我需要使用一些参数从删除服务器上的 shell 启动 php 进程,所以我认为制作 REST API 应该是一个好主意,它在用户执行 GET 请求时执行一些函数。
我编写了一个简单的 bash 脚本进行测试,并发现在从网站调用此脚本时未指定命令行参数:
shell_exec('/var/www/test.sh 123')
Bash 脚本来源:
#!/bin/sh
echo $1;
当从 root(或其他现有用户)调用此 bash 脚本时,它会正确显示它收到的参数。当我从网站调用此脚本(在 apache2 下的用户 www-data 下运行)时,它什么也不返回:
另外,如果我在控制台中以 www-data 用户执行此 bash 脚本,它也不会返回任何内容:
su -c '/var/www/test.sh 123' www-data
我还尝试从 php 的不同用户启动进程(出于安全原因,这将不起作用,但以防万一):
$result = system("su -c '/var/www/test.sh 123' sexyuser", $data);
// var_dump($result): string(0) ""
// var_dump($data): int(1)
那么,我应该赋予 www-data 用户什么权限才能在 php 下运行进程?
【问题讨论】:
-
如果您在 bash 脚本中
echo something $1会发生什么。你在任何地方都能得到“某物”的输出? -
我想启动的守护进程似乎有问题,至于 bash 脚本。我可能在调用时出错,我忘记了一个引号 :((
-
所以,bash 脚本正确返回结果,我是白痴:(
-
我们所有人都遇到了一个错字。无需费心;)